使用 dbnull 访问 sql-参数

access sql-parameter with dbnull

我想更新我的访问数据库中的一些行。在 commandtext-object 中键入整个查询时,一切正常。但是当我尝试使用参数时,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]?

仅仅将参数值设置为 DBNull 是行不通的。当我想检查列是否具有空值时,我不得不更改我的 commandtext 对象中的查询,就像他评论中提到的@Reniuz:

UPDATE MY_TABLE SET COL_1 = @COL_1 WHERE COL_2 = @COL_2 AND COL_3 IS NULL

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

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

SQL is null and = null