【问题标题】:Entity Frameworks ExecuteSqlCommand Null parameter giving error实体框架 ExecuteSqlCommand Null 参数给出错误
【发布时间】:2014-07-28 16:23:14
【问题描述】:

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

"stored proc" 需要未提供的参数 x。

我需要能够使用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 值?

【问题讨论】:

  • 错误发生在哪里?您确定您的存储过程允许使用空参数吗?这听起来与尝试使用空参数执行存储过程时发生的情况非常相似,但 SP 不接受空参数
  • DbNull.Value 不起作用?
  • 抱歉删除了我的答案...认为与其他内容有关,我不知道 VB 语法来协助@YuliamChandra 建议的内容

标签: .net vb.net entity-framework


【解决方案1】:

通过创建一个函数让它工作。代码如下:

 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

如果参数值不为空,该函数将返回 dbnull.value 或参数值。 “SqlParameter”的第二个参数需要一个对象,所以函数提供了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    相关资源
    最近更新 更多