使用 DBValue.null 将空值插入 DateTime 字段
Inserting null value into DateTime field using DBValue.null
下一段代码出现异常:
cmd.CommandText = @"insert Table ";
cmd.CommandText += @"(StartTime,
EndTime)
values(@StartTime,
@EndTime)
SELECT CAST(scope_identity() AS int)";
cmd.Parameters.AddWithValue ( "@StartTime", DBNull.Value );
cmd.Parameters.AddWithValue ( "@EndTime", DBNull.Value );
cmd.ExecuteScalar();
我遇到的异常是 Must declare '@StartTime' variable
,@EndTime
也是如此。 DBNull.Value
不是用来做这种事情的吗,我做错了什么?
我认为原因是您正在使用 AddWithValue
。
你看,AddWithValue
必须从值(和元数据,如果存在的话)推断参数的数据类型。当您使用 DBNull.Value
和内联 SQL(与存储过程相对)时,根本无法推断数据类型。
将 AddWithValue
更改为 Add
:
cmd.Parameters.Add("@StartTime", SqlDbType.DateTime).Value = DBNull.Value;
cmd.Parameters.Add("@EndTime", SqlDbType.DateTime).Value = DBNull.Value
有关详细信息,请阅读 Can we stop using AddWithValue() already?
下一段代码出现异常:
cmd.CommandText = @"insert Table ";
cmd.CommandText += @"(StartTime,
EndTime)
values(@StartTime,
@EndTime)
SELECT CAST(scope_identity() AS int)";
cmd.Parameters.AddWithValue ( "@StartTime", DBNull.Value );
cmd.Parameters.AddWithValue ( "@EndTime", DBNull.Value );
cmd.ExecuteScalar();
我遇到的异常是 Must declare '@StartTime' variable
,@EndTime
也是如此。 DBNull.Value
不是用来做这种事情的吗,我做错了什么?
我认为原因是您正在使用 AddWithValue
。
你看,AddWithValue
必须从值(和元数据,如果存在的话)推断参数的数据类型。当您使用 DBNull.Value
和内联 SQL(与存储过程相对)时,根本无法推断数据类型。
将 AddWithValue
更改为 Add
:
cmd.Parameters.Add("@StartTime", SqlDbType.DateTime).Value = DBNull.Value;
cmd.Parameters.Add("@EndTime", SqlDbType.DateTime).Value = DBNull.Value
有关详细信息,请阅读 Can we stop using AddWithValue() already?