使用dbnull

时间:2018-10-08 13:57:56

标签: c# access dbnull sqlparameter

我想更新我的Access数据库中的某些行。在命令文本对象中键入整个查询时,一切都很好。但是当我尝试使用参数时,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]?

2 个答案:

答案 0 :(得分:1)

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

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

请参见SQL is null and = null

答案 1 :(得分:0)

仅将parametervalue设置为DBNull无效。当我想检查列是否具有空值(如他的评论中提到的@Reniuz)时,必须更改命令文本对象中的查询:

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