【问题标题】:Call SQL function with parameters and WHERE clause FROM C# ExecuteReaderAsync从 C# ExecuteReaderAsync 调用带有参数和 WHERE 子句的 SQL 函数
【发布时间】:2017-04-17 10:15:13
【问题描述】:

在这里遇到这样一个问题:有一个返回 SQL 函数选择结果的方法,在没有 WHERE 子句的情况下调用函数时一切正常,但是当使用 @search 调用它时,我没有得到任何结果,但相同的查询在MsSQL 管理器。

(Visual Studio Enterprise 2015,MsSqlServer Express 2016)

    public async Task<IEnumerable<SelectedJob>> GetFunction(int? moduleId, int? specialGroupId, string search)
    {
        var commandText = "SELECT * FROM GUI.fGetSelectedJobs(@ModuleID, @SpecialGroupID)";
        var parameters = new Dictionary<string, object> { { "@ModuleID", moduleId }, { "@SpecialGroupID", specialGroupId } };

        if (!string.IsNullOrEmpty(search))
        {
            commandText = "SELECT * FROM GUI.fGetSelectedJobs(@ModuleID, @SpecialGroupID) WHERE JobName LIKE '%@search%'";
            parameters = new Dictionary<string, object> { { "@ModuleID", moduleId }, { "@SpecialGroupID", specialGroupId }, { "@search", search } };
        }

        var rows = await Database.QueryAsync(commandText, parameters);

        return rows?.Select(ParseRow).ToList();
    }

QueryAsync 方法的一部分:

var command = CreateCommand(commandText, parameters);
            command.CommandType = commandType;
            using (var reader = await command.ExecuteReaderAsync())
            while (await reader.ReadAsync())
                {
                   //Some job
                }

但是当使用 WHERE 子句构建命令时它总是空的:

有什么想法吗?

【问题讨论】:

  • GUI.fGetSelectedJobs 中的 GUI 是什么。
  • 如果 GUI 不是架构名称,请尝试使用 SELECT * FROM dbo.fGetSelectedJobs。

标签: c# sql sql-server


【解决方案1】:

您的WHERE 部分应为WHERE JobName LIKE @search",并在您的搜索字符串中添加%

parameters = new Dictionary<string, object> { { "@ModuleID", moduleId },
         { "@SpecialGroupID", specialGroupId }, { "@search", "%" + search + "%"  } };

【讨论】:

  • 或者只是在查询JobName LIKE '%" + @search + "%'
  • 我不确定我是否理解,但我不同意@Fabio,它不会使用查询参数,只是字符串连接。也许你的意思是@987654326 @
  • 我的错字,对不起 - "SELECT ... FROM ... WHERE JobName LIKE '%' + @search +'%'" 将是另一种方法。
猜你喜欢
  • 2012-03-25
  • 2020-11-29
  • 2014-03-26
  • 2017-01-15
  • 2014-03-12
  • 1970-01-01
  • 2013-12-04
  • 2020-09-04
  • 2015-08-17
相关资源
最近更新 更多