使用 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?