我想更新我的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]?
答案 0 :(得分:1)
NULL是未定义的,因此没有什么可以等于NULL,您必须使用IS NULL语法。
您需要一个IF / ELSE块,以基于具有COL_3的值来构建SQL。如果没有值,则使用IS NULL构建SQL,或者如果存在,则构建SQL并绑定变量(现有代码)。
答案 1 :(得分:0)
仅将parametervalue设置为DBNull无效。当我想检查列是否具有空值(如他的评论中提到的@Reniuz)时,必须更改命令文本对象中的查询:
UPDATE MY_TABLE SET COL_1 = @COL_1 WHERE COL_2 = @COL_2 AND COL_3 IS NULL