2016-07-28 82 views
-1

我从Visual Studio项目调用存储过程并传递DateTime参数。如何将DateTime对象设置为null并将其作为参数发送给存储过程?

下面是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,并将其作为参数来我的存储过程?

+0

你试过命名的SqlParameter @dtStartFrom而不只是dtStartFrom? –

回答

1

你的参数名称应与该查询:

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

谢谢我修复了它,但现在我得到错误: SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。 是否可以发送null作为参数? – Michael

+0

@Michael检查编辑。 – user3185569

+0

Re:_“SqlDateTime溢出”_,你在数据库中使用DATETIME或DATETIME2类型吗? – stakx

相关问题