【问题标题】:C# MySql Parameterized Query makes longs into nullC# MySql 参数化查询使 longs 变为 null
【发布时间】:2016-08-17 14:44:46
【问题描述】:

代码基于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 被视为 null。

Message=Column 'auction_key' 不能为空

我尝试更改 my.ini 中的“严格”设置,但没有任何区别。

请帮忙。

【问题讨论】:

  • 谢谢大家 - 在添加参数之前放置命令修复它。

标签: c# mysql parameterized


【解决方案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);

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以通过简单地执行以下操作来缓解您的问题:

    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 如果成功运行,将返回零或一。您也可能需要手动指定SqlDbType。避免 SQL 推断错误。此外,这将正确地确定您的 MySqlCommand 范围,因此您可以正确地用于查询。

    根据文档,它确实实现了IDisposable 以利用using 块。这可确保您再次实例化您的 MySqlCommand

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多