将参数中的NULL传递给存储过程中的DateTime字段

Jam*_*lor 11 sql vb.net asp.net parameters null

我有一个存储过程,使用我提供的参数更新数据库但我无法将NULL传递给存储过程

我需要使NULL的字段是DateTime字段

DB.Parameters.AddWithValue("@date", NULL)
Run Code Online (Sandbox Code Playgroud)

这给了我错误

'NULL'未声明.不再支持'Null'常量; 请改用"System.DBNull"

所以我试过了

DB.Parameters.AddWithValue("@date", DBNull.Value.ToString())
Run Code Online (Sandbox Code Playgroud)

但是1900-01-01 00:00:00.000当它传递""给字段时,这会产生列中的值

我也试过了

DB.Parameters.AddWithValue("@date", DBNull.Value)
Run Code Online (Sandbox Code Playgroud)

但它产生了这个错误

"System.DBNull"类型的值无法转换为"String".

有没有人有任何想法?

Rob*_*lls 16

或者您可以像这样添加参数,如果您的变量为null,则在数据库中为其赋予空值:

DB.Parameters.AddWithValue("@date", myDateTime ?? (object)DBNull.Value);
Run Code Online (Sandbox Code Playgroud)

你需要将其设置为Amit提到的可空类型.

更多详情和背景,请访问http://evonet.com.au/overview-of-c-nullable-types/


Luk*_*keH 13

尝试使用这样的东西,Add而不是AddWithValue:

DB.Parameters.Add("@date", SqlDbType.DateTime).Value = DBNull.Value;
Run Code Online (Sandbox Code Playgroud)