2016-08-17 3 views
-2

에 갈망을 만드는 코드가 https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.htmlC#을 MySQL의 매개 변수가있는 쿼리가 null

public void TableTest(string connectionString) 
    { 
     string sqlToCreateTable = @"CREATE TABLE IF NOT EXISTS my_table 
      (auction_key BIGINT NOT NULL, auction_owner VARCHAR(25),  first_seen BIGINT, 
      PRIMARY KEY(auction_key))"; 

     string sqlInsertOrUpdateAuction = "INSERT INTO my_table (auction_key) VALUES (@my_auc_id); "; 

     using (MySqlConnection dbConnection = new MySqlConnection(connectionString)) 
     { 
      dbConnection.Open(); 

      // is the table in the database? 
      MySqlCommand cmd = new MySqlCommand(sqlToCreateTable, dbConnection); 
      cmd.ExecuteNonQuery(); 

      cmd.Parameters.AddWithValue("@my_auc_id", 123456); 
      cmd = new MySqlCommand(sqlInsertOrUpdateAuction, dbConnection); 
      cmd.ExecuteNonQuery(); 

     } 
    } 

을 기반으로이 오류는 123456가 null로 볼 수 있다는 것입니다.

메시지 = 열 'auction_key는'I는 "엄격한는"my.ini 파일에 설정하고 차이가 없습니다 변경 시도

null 일 수 없습니다.

도와주세요.

+0

매개 변수를 추가하기 전에 명령을 넣어 주셔서 고맙습니다. – Patrick

답변

1

글쎄, 당신은 명령에 매개 변수를 추가 한 다음 새 명령을 인스턴스화 : 당신이 그렇게한다면

cmd.Parameters.AddWithValue("@my_auc_id", 123456); 
cmd = new MySqlCommand(sqlInsertOrUpdateAuction, dbConnection); 

는 명령이 더 이상 @my_auc_id의 값이없는 것이다. 다음 두 줄을 전환 해보십시오.

cmd = new MySqlCommand(sqlInsertOrUpdateAuction, dbConnection); 
cmd.Parameters.AddWithValue("@my_auc_id", 123456); 

희망 사항.

0

당신은 단순히 다음을 수행하여 문제를 완화 할 수 :

using(var connection = new MySqlConnection(dbConnection)) 
{ 
    connection.Open(); 
    using(var command = new MySqlCommand(createTableQuery, connection)) 
    { 
      command.ExecuteNonQuery(); 
    } 

    using(var command = new MySqlCommand(insertOrUpdate, connection)) 
    { 
      command.Parameters.Add("..", SqlDbType = SqlDbType.Int).Value = 123456; 
      command.ExecuteNonQuery(); 
    } 
} 

이 성공적 일 경우 ExecuteNonQuery이 제로 또는 1을 반환합니다 있음을 유의하십시오. 또한 수동으로 SqlDbType을 지정할 수도 있습니다. SQL 유추를 잘못 피하십시오. 또한 정확히 MySqlCommand의 범위를 지정하므로 쿼리에 올바르게 활용할 수 있습니다.

그리고 문서에 따르면 IDisposable을 구현하여 using 블록을 사용합니다. 이렇게하면 MySqlCommand을 다시 인스턴스화 할 수 있습니다.