У меня есть хранимая процедура, которая в зависимости от входных данных возвращает несколько строк целых или несколько строк DateTimes.
Я посмотрел ответы на этот вопрос и прочитал и реализовал решение Скотта Гатриса из Обработка множественных форм результатов из SPROC (прокрутите страницу вниз, чтобы увидеть этот раздел.)
К сожалению, он просто не работает.
Вот мой код:
[Function(Name = "FunkyStoredProcedure")]
[ResultType(typeof(List<int>))]
[ResultType(typeof(List<DateTime>))]
public IMultipleResults FunkyStoredProcedure(int appId, int sId, int cId)
{
IExecuteResult result = this.ExecuteMethodCall(this, (MethodInfo)(MethodInfo.GetCurrentMethod()), appId, sId, cId);
return (IMultipleResults)result.ReturnValue;
}
}
Используя SQL Server Profiler, Linq 2 Sql создает код, который выглядит следующим образом:
declare @p6 int
set @p6=0
exec sp_executesql N'EXEC @RETURN_VALUE = [FunkyStoredProcedure] @appId = @p0, @sId = @p1, @cId = @p2',N'@p0 int,@p1 int,@p2 int,@RETURN_VALUE int output',@p0=2,@p1=4,@p2=2,@RETURN_VALUE=@p6 output
select @p6
, который создает результирующий набор, который выглядит следующим образом:
cId
-----------
694
42
43
41
4732
-----------
0
(1 row(s) affected)
Обратите внимание, что здесь есть два набора результатов (должен быть только один.) И обратите внимание, что второй набор результатов, тот, который возвращается в LinqToSql, равен 0!
Строка "exec sp_executesql ..." создает первый правильный набор результатов.
Строка «select @ p6» выдает второй, неправильный набор результатов.
Прежде всего, почему @ p6 определяется как int? В этой функции у меня есть два возможных ResultTypes: List и List. Это кажется проблемой прямо здесь.
Во-вторых, почему он не возвращает вывод хранимой процедуры? И вместо того, чтобы вернуть значение @ p6?
Наконец, самое главное, как мне заставить это работать правильно?