我有这个 C# 网络表单,它有一个日期选择器框。如果日期设置为空(默认值),我希望它将 NULL 传递给数据库。这发生在我的参数化查询中。
SqlParameter CMActionDate = new SqlParameter();
CMActionDate.ParameterName = "@ActionDate";
if (ActionDate.Equals(""))
{
CMActionDate.Value = System.Data.SqlTypes.SqlDateTime.Null;
}
else
{
CMActionDate.Value = ActionDate;
}
当我打开调试时,我看到日期确实是“”,所以它进入 IF 语句并将 actiondate.value 设置为 {Null},就像我认为的那样。
然而。
然后当它执行非查询时,我单击放大镜并看到:
UPDATE table SET [action_date] = '' WHERE [id] = 2488
我想看到的是:
UPDATE table SET [action_date] = 'Null' WHERE [id] = 2488
由于 action_date 从未真正设置为 NULL,因此 datetime 字段中的值将恢复为“01/01/1900 12:00:00AM”,这本身就是一种痛苦。
我尝试将 CMActionDate.Value 设置为以下值无济于事(我得到与上面相同的结果。):
- DBNull.值;
- “空值”;
- SqlDateTime.Null;
- 空值;
帮助。
编辑
可能我没说清楚?是的,参数化查询当然是这样的:
"UPDATE CM_Codebase SET [action_date] = '" + @ActionDate + "' WHERE [id] = " + @CM_id + "";
但是当我在 VS 中调试这个东西时,我在 ExecuteNonQuery(); 之前放了一个断点。所以我可以看到它试图运行的 SQL。在那里我看到了实际的 SQL,并看到了 action_date='' 的位置。
这有帮助吗?