我有这个C#webform有一个日期选择器框。如果日期设置为空(默认),我希望它将NULL传递给数据库。这发生在我的参数化查询中。我的SQLParameter没有正确传递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}就像我认为它应该。
但是,
当然后去执行nonquery,我点击放大镜看到:
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:00 AM”,这本身就很痛苦。
我试图设置CMActionDate.Value为下列值无济于事(I得到相同的结果如上述。):
- DBNull.Value;
- “NULL”;
- SqlDateTime.Null;
- null;
帮助。
编辑
也许我还不清楚?是的,当然了参数化查询看起来是这样的:
"UPDATE CM_Codebase SET [action_date] = '" + @ActionDate + "' WHERE [id] = " + @CM_id + "";
但是,当我在VS调试这个东西,我把一个断点权的ExecuteNonQuery()之前;所以我可以看到它试图运行的SQL。在那里我可以看到实际的SQL并查看action_date =''的位。
这有帮助吗?
你做错了。再次阅读我的答案中的代码。它仍然归结于您试图使用像替代变量这样的参数,并且从C#代码的角度来看,情况并非如此。 – 2009-02-24 19:50:32
请注意,在我的代码中,没有围绕@ActionDate的单引号,并且在查询中包含@ActionDate,只是字符串文字的另一部分。 – 2009-02-24 19:54:41