Почему параметр out хранимой процедуры не читается методом ExecuteSqlCommand инфраструктуры объектов? - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь прочитать значение параметров OUT, возвращаемое хранимой процедурой, но выдает ошибку DBNULL . Даже процедура возвращает значение.

Код:

   int? outParam= 0;

   SqlParameter sqlParam= new SqlParameter("@model", user.Name+" Model");
   SqlParameter sqlParamOut = new SqlParameter("out", outParam);
   sqlParamOut.DbType = System.Data.DbType.Int32;
   sqlParamOut.Direction = System.Data.ParameterDirection.Output;

   UsersPhonesDBContext.Database.ExecuteSqlCommand("dbo.InsertPhones @model, @out", sqlParam, sqlParamOut);

   outParam = Convert.ToInt32(sqlParamOut.Value);

SP:

alter PROCEDURE InsertPhones (

    @model varchar(100),
    @out int output
)
AS
BEGIN
        Insert into Phones (Model, Manufacturer)
        Values 
        (
            @model,
            'Hunain Phone'
        )

        set @out= SCOPE_IDENTITY();
        Select @out
END
GO

1 Ответ

0 голосов
/ 17 января 2019

out параметры в SQL Server - это весело. Вы должны повторить себя везде .

В частности, здесь вы забыли упомянуть об этом в списке параметров при вызове хранимого процесса. dbo.InsertPhones @model, @out должно быть dbo.InsertPhones @model, @out out. Также может быть способ пропустить список параметров из этой строки и указать SQL Server, что вы даете ему имя хранимой процедуры, а не произвольный текст запроса, но я не уверен, как вы будете делать это конкретно здесь (с SqlCommand объект, это будет через свойство CommandType).

Если вы используете параметр out, select в конце хранимой процедуры не требуется, но я предполагаю, что это была попытка исправить.

...