programing

MySQL INSERT 매개변수가 있는 C#

padding 2023. 10. 25. 23:08
반응형

MySQL INSERT 매개변수가 있는 C#

안녕하세요, Visual C# 2010과 MySQL Version 5.1.48-community를 사용하고 있습니다.당신이 이 코드를 도와주길 바랍니다.난 그게 잘 안 돼요.제가 무엇을 빠뜨리고 있나요?

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();

제가 정리를 하려고 할 때.다음과 같이 적혀있습니다.

사용자 열은 null일 수 없습니다.

편집됨:

하지만 이 코드를 사용해 보면요.

comm.CommandText = "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')";

하지만 이 코드는 sql injection 공격을 받기 쉽지만 작동합니다. 오류가 발생하지 않습니다.

편집됨:

이걸 쓰려고 했는데요.여기서 찾아서 잘 될 줄 알았는데 오류가 나네요.

인덱스(0 기준)는 0보다 크거나 같아야 하며 인수 목록의 크기보다 작아야 합니다.

감 잡히는 게 없어요?

    string a = "myname";
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "INSERT INTO room(person,address) VALUES(?,?)";
    //cmd.Prepare();

    cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;
    cmd.Parameters.Add("address", MySqlDbType.VarChar).Value = "myaddress";
    cmd.ExecuteNonQuery(); // HERE I GOT AN EXCEPTION IN THIS LINE

어떤 도움이라도 주시면 감사하겠습니다.

편집: 해결했습니다. 이 코드를 사용했습니다.

cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)";
cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname";
cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress";
cmd.ExecuteNonQuery();

감사합니다.

사용하셔도 좋습니다AddWithValue메소드:

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();

오어

사용해보기?대신에@, 예:

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)";
comm.Parameters.Add("?person", "Myname");
comm.Parameters.Add("?address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();

도움이 되길...

사용.AddWithValue방법:

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");

저는 같은 문제가 있었습니다. 마침내 @ 대신 ?sigil을 사용해 보았는데 효과가 있었습니다.

문서에 따르면:

참고. 이전 버전의 공급자는 SQL에서 매개변수를 표시할 때 '@' 기호를 사용했습니다.이는 MySQL 사용자 변수와 호환되지 않으므로 공급자는 이제 '?' 기호를 사용하여 SQL에서 매개 변수를 찾습니다.이전 코드를 지원하려면 연결 문자열에 'old syntax=yes'를 설정하면 됩니다.이렇게 하면 SQL에서 사용하려는 매개 변수를 정의하지 못할 경우 예외가 발생하지 않습니다.

그래요? 누군가가 구 구문을 사용하려고 한다면 그냥 예외를 두는 게 어때요?20라인 프로그램을 위해 몇 시간 후면...

MySQL::MySQL 명령

3가지: 사용하기using문, 사용AddWithValue및 접두사 매개변수에 ? 및 add를 지정합니다.Allow User Variables=True연결 문자열에 연결합니다.

 string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
 using (var conn = new MySqlConnection(connString))
 {
      conn.Open();
      var comm = conn.CreateCommand();
      comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
      comm.Parameters.AddWithValue("?person", "Myname");
      comm.Parameters.AddWithValue("?address", "Myaddress");
      comm.ExecuteNonQuery();
  }

또한 명령 사용에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx 을 참조하고, 사용자 변수 허용 옵션(버전 5.2.2 이상에서만 지원됨)에 대한 자세한 내용은 http://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html 을 참조하십시오.

Windows Form Application에서 mysql-connector-net-5.1.7-noinstall 및 Visual Studio(2015)를 사용하여 데이터를 삽입하는 동안 매우 유사한 문제에 직면했습니다.나는 C# 구루가 아닙니다.그래서 모든 것을 해결하는 데 2시간 정도 걸립니다.

최근에 작동하는 코드는 다음과 같습니다.

string connetionString = null;
connetionString = "server=localhost;database=device_db;uid=root;pwd=123;";

using (MySqlConnection cn = new MySqlConnection(connetionString))
{
    try
    {
        string query = "INSERT INTO test_table(user_id, user_name) VALUES (?user_id,?user_name);";
        cn.Open();
        using (MySqlCommand cmd = new MySqlCommand(query, cn))
        {
            cmd.Parameters.Add("?user_id", MySqlDbType.Int32).Value = 123;
            cmd.Parameters.Add("?user_name", MySqlDbType.VarChar).Value = "Test username";
            cmd.ExecuteNonQuery();
        }
    }
    catch (MySqlException ex)
    {
        MessageBox.Show("Error in adding mysql row. Error: "+ex.Message);
    }
}
comm.Parameters.Add("person", "Myname");

제가 한 일은 이렇습니다.

String person;
String address;
person = your value;
address =your value;
string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
    MySqlConnection conn = new MySqlConnection(connString);
    conn.Open();
    MySqlCommand comm = conn.CreateCommand();
    comm.CommandText = "INSERT INTO room(person,address) VALUES('"+person+"','"+address+"')";
    comm.ExecuteNonQuery();
    conn.Close();

필요한 경우 DB 유형과 일치하도록 "SqlDbType"에서 코드를 조정하고 다음 코드를 사용합니다.

comm.Parameters.Add("@person",SqlDbType.VarChar).Value=MyName;

또는:

comm.Parameters.AddWithValue("@person", Myname);

그것은 효과가 있겠지만 사령부와 함께 기억해야 합니다.매개 변수.Add(), 특정 SqlDbType 및 Command를 사용하여 정의할 수 있습니다.매개 변수.AddWithValue()는 매개 변수 값을 암시적으로 기반으로 SqlDbType을 가져오려고 하는데, 만약 데이터 형식을 암시적으로 변환할 수 없다면 때때로 깨질 수 있습니다.

도움이 되길 바랍니다.

이것을 시도해 보세요 그것은 효과가 있습니다.

 MySqlCommand dbcmd = _conn.CreateCommand();
    dbcmd.CommandText = sqlCommandString;
    dbcmd.ExecuteNonQuery();
    long imageId = dbcmd.LastInsertedId;

언급URL : https://stackoverflow.com/questions/16167924/c-sharp-with-mysql-insert-parameters

반응형