如何将DateTime对象设置为null并作为参数发送到存储过程

本文关键字:参数 存储过程 null DateTime 对象 设置 | 更新日期: 2023-09-27 17:58:59

我从visual studio项目中调用存储过程并传递DateTime参数。

这里是c#代码:

DateTime? dtStartFrom = null;
var result = _context.Database.SqlQuery<DamageEventsDTL>("SPDamageEventsDTL  @dtStartFrom", new SqlParameter("dtStartFrom", dtStartFrom)).ToList();

存储过程中如何定义变量:

@dtStartFrom date

在这一行,我得到了一个例外:

The parameterized query '(@dtStartFrom nvarchar(4000))SPDamageEventsDTL  @dtStartFrom' expects the parameter '@dtStartFrom', which was not supplied.

所以我想空值有问题,所以我尝试了这种方式:

 DateTime? dtStartFrom = DBNull.Value;

但在上面一行,我得到了这个错误:

Cannot implicitly convert type 'System.DBNull' to 'System.DateTime?'

知道如何将DateTime对象设置为null并作为参数发送到存储过程中吗?

如何将DateTime对象设置为null并作为参数发送到存储过程

您的参数名称应该与查询的名称匹配:

new SqlParameter("@dtStartFrom", dtStartFrom);

编辑:

DateTime? dtStartFrom = null;
SqlParameter sqlDateparam = new SqlParameter("@dtStartFrom", SqlDbType.DateTime);
sqlDateparam.IsNullable = true;
if (dtStartFrom.HasValue)
    sqlDateparam.Value = dtStartFrom.Value;
else
    sqlDateparam.Value = DBNull.Value
var result = _context.Database.SqlQuery<DamageEventsDTL>("SPDamageEventsDTL  @dtStartFrom", sqlDateparam).ToList();