下一个代码给了我一个例外:
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
用于这样的事情,我做错了什么?
答案 0 :(得分:5)
我认为原因是您使用的是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