实体框架ExecuteSqlCommand Null参数给出错误

时间:2014-07-28 16:23:14

标签: .net vb.net entity-framework

我正在使用Entity Framework 5.当我调用参数为null的存储过程时,我得到

  

"存储过程"期望参数x未提供。

即使参数为null,我也需要能够使用ExecuteSqlCommand

 Sub SaveMANUALPosting(ByVal ExpiryDate AS DateTime)

    db.Database.ExecuteSqlCommand("exec spLC_STAGEPostingLCAmendment @argExpiryDate", 
     New SqlParameter("argExpiryDate", If((IsNothing(ExpiryDate)), DBNull.Value, ExpiryDate)))

 end Sub

上述代码当然不起作用,但说明了我要做的事情。如果传入参数为空,我如何传递DbNull值?

1 个答案:

答案 0 :(得分:2)

通过创建一个函数来实现它。这是代码:

 Sub SaveMANUALPosting(ByVal ExpiryDate AS DateTime)

     db.Database.ExecuteSqlCommand("exec spLC_STAGEPostingLCAmendment @argExpiryDate", 
      New SqlParameter("argExpiryDate", FormatDBValue(ExpiryDate))

 end Sub

 Protected Function FormatDBValue(ByVal pIn As Object) As Object
    If IsNothing(pIn) Then
        Return DBNull.Value
    Else
        Return pIn
    End If
 End Function

如果函数不为null,则函数将返回dbnull.value或parmeter值。 " SqlParameter"的第二个参数;期望一个对象,所以函数提供了。

感谢您的回复。让我思考......