使用DBValue.null将空值插入DateTime字段

时间:2018-04-03 12:42:34

标签: c# sql-server visual-studio executescalar

下一个代码给了我一个例外:

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用于这样的事情,我做错了什么?

1 个答案:

答案 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

有关详情,请参阅Can we stop using AddWithValue() already?