如何使用实体框架将空值传递到存储过程?

ski*_*skd 7 c# asp.net-mvc entity-framework

我正在使用mvc应用程序与entityframework.我想将null值参数传递给存储过程.我想将MerchantID传递为null,有时MerchantID也有值.

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;
Run Code Online (Sandbox Code Playgroud)

}

我的问题是当我通过MerchantID = null然后它给我以下错误

"参数化查询'(@ GroupID [dbo].[tblTVPForCSVINT] READONLY,@ MerchantID nvarchar('期望参数'@MerchantID',未提供."

如何为MerchantID传递空值?

Jur*_*eri 16

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

new SqlParameter("MerchantID", MerchantID ?? SqlInt32.Null)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,上面的解决方案是有效的。但是在编译时显示转换错误,如果我在 DBNull.Value 上设置它工作正常。所以用它?三元运算符。 (2认同)