【问题标题】:How to pass a null value into a stored procedure with Entity Framework?如何使用实体框架将空值传递给存储过程?
【发布时间】:2015-07-03 07:56:45
【问题描述】:

我有一个使用实体框架的 MVC 应用程序。我想将具有空值的参数传递给存储过程。在某些情况下,我想将 MerchantID 传递为 null

GetValues(int[] TicketID,int? MerchantID,bool IsOpen)
{

//TicketID has values 1123,1122 etc
//MerchantID sometimes null
//IsOpen true/false

  DataTable tbldepartmentid = new DataTable("Departmentid");
  tbldepartmentid.Columns.Add("VALUE", typeof(int));
  
  foreach (var id in TicketID)
      tbldepartmentid.Rows.Add(id);

 List<GetTroubleTicketDetails_Result> GetTroubleTicketDetails = _getTroubleTicketDetails_Result.ExecuteCustomStoredProc("Tickets.GetDetails", " @GroupID,@MerchantID,@Open",
                 new SqlParameter("GroupID", SqlDbType.Structured) { Value = tbldepartmentid, TypeName = "dbo.tblTVPForCSVINT" }
                 , new SqlParameter("MerchantID", MerchantID)
                 , new SqlParameter("Open", IsOpen)).ToList();
                return GetTroubleTicketDetails;
}

我的问题是当我通过 MerchantID=null 时,它给了我以下错误:

"参数化查询'(@GroupID [dbo].[tblTVPForCSVINT] READONLY,@MerchantID nvarchar(' 需要参数 '@MerchantID', 没有提供。”

如何为 MerchantID 传递空值?

【问题讨论】:

    标签: c# asp.net-mvc entity-framework


    【解决方案1】:

    您需要传递SqlInt32.Null 而不是null,如下所示:

    new SqlParameter("MerchantID", MerchantID ?? SqlInt32.Null)
    

    【讨论】:

    • 谢谢,上述解决方案正在运行。但在编译时显示转换错误,如果我设置 DBNull.Value 它工作正常。所以要和它一起使用吗?三元运算符。
    • 针对MerchantIDint 的情况编辑了我的答案。
    猜你喜欢
    • 2016-01-09
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多