Ну, это хорошо ответили на вопрос, но я не могу понять это правильно для меня. То, что я пытаюсь сделать, это вызвать хранимую процедуру из проекта .NET Core, используя Entity Framework с некоторыми параметрами. Одним из таких параметров должен быть массив (тип таблицы, который я рассматриваю в SQL Server при создании пользовательского типа данных таблицы). Я следовал по этой ссылке Stackoverflow . Но я получил ошибку при попытке выполнить команду SQL.
Вот мой код:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
foreach (var section in model.VMSectionIds) //model.VMSectionIds contains set of integers
{
dt.Rows.Add(section);
}
и, наконец, я вызываю хранимую процедуру следующим образом:
var sectiolist = new SqlParameter("@Sections", SqlDbType.Structured)
{
TypeName = "[dbo].[SectionList]",
Value = dt
};
_db.ExecuteSqlCommand("EXEC [SP_GenerateRegularEmployeeSalary] "+mastermodel.ID+","+ fromdate + "," + todate + ",1," + sectiolist + ""); //don't worry I took care of SQL injection for others parameter
Но это выполнение выдает исключение
SqlException: необходимо объявить скалярную переменную "@Sections"
Я не могу понять, где именно проблема. Вот вызов хранимой процедуры (с некоторым статическим параметром теста) из SQL для ясного понимания моего механизма вызова хранимой процедуры:
DECLARE @data [SectionList]
INSERT @data (Id) VALUES (2, 3)
EXEC [SP_GenerateRegularEmployeeSalary] 2,'20190401','20190430','1',@data