ここにこのような問題があります:SQL関数の選択結果を返すメソッドを用意してください。WHERE句を指定しないで関数を呼び出すと問題はありませんが、@search結果は何も得られませんでしたが、同じクエリはMsSQL Managerで完璧に機能します。パラメータとWHERE句を持つSQL関数を呼び出すC#ExecuteReaderAsync
(Visual Studioのエンタープライズ2015年、MSSQLSERVERエクスプレス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
}
アイデア?
GUI.fGetSelectedJobsでGUIものです。 – Kapil
GUIがスキーマ名でない場合は、SELECT * FROM dbo.fGetSelectedJobsを使用してみてください。 – Kapil