【问题标题】:How to pass optional parameters to stored procedure using Entity Framework?如何使用实体框架将可选参数传递给存储过程?
【发布时间】:2015-11-03 06:49:13
【问题描述】:

我有下面的存储过程,它返回 1000 行。

ALTER PROC [dbo].[PROC_Insights_offinvoice_taxmaster]
@PROC_TYPE VARCHAR(50),@SEARCHBY VARCHAR(50) = NULL , @SEARCHVALUE     VARCHAR(250) = NULL
AS
BEGIN
    DECLARE @SQLQUERY VARCHAR(MAX)
    IF(@PROC_TYPE = 'DISPLAY')
    BEGIN

    SET @SQLQUERY = '
    SELECT  [taxUID],[taxCode],[formatUID],[formatName],[taxDescription],[classcode],[classDescription],[locationShortName],
            [zoneUID],[zoneName],[taxValue],[taxPercentage],[createdBy],[createdDate],[modifiedBy],[modifiedDate],[fy_Year]
    FROM [Insights].[dbo].[Insights_offinvoice_taxmaster]
    WHERE 1 = 1 '
    IF @SEARCHBY IS NOT NULL
    BEGIN
    SET @SQLQUERY  = @SQLQUERY  + 'AND '+ @SEARCHBY + ' like ' + '''' + '%' + @SEARCHVALUE + '%' + ''''
        END

        EXECUTE(@SQLQUERY)
    END

END

我已经使用下面的方法调用了存储过程。

var context = new InsightsEntities();
var param = new SqlParameter[3];
param[0] = new SqlParameter { ParameterName = "@PROC_TYPE", Value = "DISPLAY" };
param[1] = new SqlParameter { ParameterName = "@SEARCHBY", Value = "TaxValue" };
param[2] = new SqlParameter { ParameterName = "@SEARCHVALUE", Value = "1000" };

IEnumerable<Insights_offinvoice_taxmaster> tbl = context.Database.SqlQuery<Insights_offinvoice_taxmaster>("exec PROC_Insights_offinvoice_taxmaster @PROC_TYPE, @SEARCHBY, @SEARCHVALUE", param).ToList();

当我传递所有三个参数时,这个工作正常。假设如果我只传递第一个参数,它会显示传递其余两个参数的错误。实体框架中如何使用可选参数?

【问题讨论】:

  • 是的。我试过。但我不知道如何传递可选参数。它也有可选参数。在这种情况下如何通过?
  • 我会说只是传递NULL 或空字符串并在您的存储过程中处理它们?
  • 前端有没有其他方法可以解决这个问题?
  • 很遗憾,无法对此发表评论。我几乎没有 c# 经验。我总是在 SQL 端处理这些事情,而不是在前端。

标签: entity-framework linq asp.net-mvc-4 stored-procedures optional-parameters


【解决方案1】:

您收到错误是因为您缺少参数还是因为您有一个包含 3 个项目的数组并且其中一些仍然为空?当我有一个带有可选参数的 SP 时,我只需将需要发送的内容添加到列表中,然后在 SP 调用之前将列表转换为数组。

var list = new List<SqlParameter>();
list.Add(new SqlParameter ( "@PROC_TYPE", "DISPLAY" ));

var param = list.ToArray();

【讨论】:

    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多