首页 > 解决方案 > 使用 dbnull 访问 sql 参数

问题描述

我想更新我的访问数据库中的一些行。在命令文本对象中键入整个查询时,一切正常。但是当我尝试使用参数时,无法识别 DBNull 值:

这是我这样做的方法:

using (var connection = new OleDbConnection(CONNECTION_STRING_ACCESS))
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
          //this works
          //command.CommandText = "UPDATE MY_TABLE SET COL_1 = '10' WHERE COL_2 = '78' AND COL_3 IS NULL";

          //this doesn't work...
          command.CommandText = "UPDATE MY_TABLE SET COL_1 = @COL_1 WHERE COL_2 = @COL_2 AND COL_3 = @COL_3
          command.Parameters.AddWithValue("@COL_1", 20);
          command.Parameters.AddWithValue("@COL_2", 78);
          command.Parameters.AddWithValue("@COL_3", DBNull.Value);

          var rows_updated = command.ExecuteNonQuery();

          Console.WriteLine(rows_updated);
     }
}

我如何处理 DBNull 参数以更新具有 COL_2 = 78 和 COL_3 = [Null] 的行?

标签: c#ms-accessdbnullsqlparameter

解决方案


NULL 是未定义的,所以没有什么可以等于 NULL,你必须使用 IS NULL 语法。

您需要一个 IF/ELSE 块来构建基于具有 COL_3 值的 SQL。如果没有值,则使用 IS NULL 构建 SQL,或者构建 SQL 并绑定变量(您现有的代码)(如果存在)。

请参阅SQL 为 null 和 = null


推荐阅读