.net 处理SQLParameter中可能为空的datetime值

.net 处理SQLParameter中可能为空的datetime值,.net,datetime,sqlparameter,.net,Datetime,Sqlparameter,我试图做一件我认为很简单的事情,但我有问题。我在.NET应用程序中使用SQLCommand将新记录插入到表中 我传入的内容可以是datetime值,也可以是null。但下面的代码似乎不起作用: command.Parameters.AddWithValue("@SettleDate", IIf(String.IsNullOrEmpty(SettleDate), Nothing, DateTime.Parse(SettleDate))) 其中“SettleDate”是一个包含日期的字符串,该日

我试图做一件我认为很简单的事情,但我有问题。我在.NET应用程序中使用SQLCommand将新记录插入到表中

我传入的内容可以是datetime值,也可以是null。但下面的代码似乎不起作用:

command.Parameters.AddWithValue("@SettleDate", 
IIf(String.IsNullOrEmpty(SettleDate), Nothing, DateTime.Parse(SettleDate)))
其中“SettleDate”是一个包含日期的字符串,该日期可以为null。我认为这段代码将涵盖不尝试解析空值的条件,但是当它运行时,我得到以下错误,这看起来是来自Datetime.parse方法:

String reference not set to an instance of a String.
Parameter name: s

这怎么可能?如果“SettleDate”为null,则它永远不会到达解析方法。

应将VB.NET的短路运算符与DbNull.Value一起使用

If(String.IsNullOrEmpty(SettleDate), DBNull.Value, DateTime.Parse(SettleDate)))

,与IIF相反,如果第一个表达式为真,则函数不会尝试计算表达式的两侧。还要注意,要将空值传递给您使用的SqlParameter。

Ah,这是一件我没有意识到的非常微妙的事情。谢谢