2016-08-17 55 views
-2

該代碼是基於https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.htmlC#MySQL的參數化查詢使得多頭成空

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被視爲無效。

消息=列「auction_key」不能爲空

我試圖改變「嚴格」在的my.ini設置和它沒有什麼區別。

請幫忙。

+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將返回一個0或1,如果它成功合作。你也可能想要手動指定SqlDbType。避免SQL錯誤地推斷。此外,這將正確範圍您的MySqlCommand,所以你可以正確利用的查詢。

並根據文檔,它確實實施了IDisposable以利用using塊。這可以確保您再次實例化您的MySqlCommand