C#MySql参数化查询使long成为null

时间:2016-08-17 14:44:47

标签: c# mysql parameterized

代码基于https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html

 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'不能为空

我尝试更改" strict"在my.ini中设置并没有任何区别。

请帮助。

2 个答案:

答案 0 :(得分: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);

希望这有帮助。

答案 1 :(得分: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