У меня проблема с вызовом хранимой процедуры из моего DbContext. Хранимая процедура принимает параметр с табличным значением.
Синтаксис процедуры:
ALTER PROCEDURE dbo.SaveResults
@resultID int,
@positiveResults AS dbo.PositiveResultTypes READONLY
AS
У меня есть DataTable(dtResults), заполненная допустимыми значениями для типа таблицы.
Мой код вызова:
var resultsParam = new SqlParameter("@positiveResults", SqlDbType.Structured);
resultsParam.Value = dtResults;
resultsParam.TypeName = "PositiveResultTypes";
db.Database.ExecuteSqlCommand(
"dbo.SaveResults",
new SqlParameter("@resultID", id),
resultsParam);
Это терпит неудачу с:
Процедура или функция «SaveResults» ожидает параметр «@resultID», который не был предоставлен.
Здесь допустима переменная id, а не null (int, значение 1).
Я попытался изменить синтаксис на "dbo.SaveResults @resultID @positiveResults" в коде вызова без изменения результата.
Почему не видит этот параметр?
ИЗМЕНИТЬ
SQL Profiler показывает, что этот параметр проходит правильно...
declare @p3 dbo.PositiveResultTypes
insert into @p3 values(N'1')
insert into @p3 values(N'4')
insert into @p3 values(N'6')
exec sp_executesql N'dbo.SaveResults',N'@positiveResults [PositiveResultTypes] READONLY,@resultID int',@positiveResults=@p3,@resultID=1
Однако этот синтаксис для EXEC несколько неверен. Когда я выполняю это для базы данных, я получаю тот же результат:
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
Msg 201, Level 16, State 4, Procedure SaveResults, Line 0
Procedure or function 'SaveResults' expects parameter '@resultID', which was not supplied.