【发布时间】: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