c# - 使用 DBValue.null 将 null 值插入 DateTime 字段

标签 c# sql-server visual-studio executescalar

下一个代码给了我一个异常(exception):

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();

我得到的异常是必须声明“@StartTime”变量@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?

关于c# - 使用 DBValue.null 将 null 值插入 DateTime 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49630387/

相关文章:

c# - 在特定时区创建 DateTime 然后转换为 utc

c# - 为什么此代码在 C# 中无效?

c# - 获取数组索引的优雅方式

sql-server - 为什么 SharePoint 内容数据库中的 Sites.FullUrl 为空?在哪里可以找到网站集 url?

c++ - 在Cmake中构建Assimp时出错

c# - 如何在没有作业程序集的本地副本的情况下在 Quartz.net 中安排远程作业?

mysql - 从 MySQL 移动到 SQL Server 后显示的错误

sql - SQL Server如何实现LIMIT?

sql-server - 如何在VS 2015中调试存储过程?

c++ - 如何使用 clang-tidy 通过 visual studio 实现现代化