Выполните хранимую процедуру, которая должна вернуть int - PullRequest
0 голосов
/ 24 октября 2018

У меня есть хранимая процедура, которая принимает несколько входных параметров и возвращает целое число:

CREATE procedure [dbo].[HB_ValidateLogin_HitAlacarte]
(
    @Login nvarchar(50),
    @Pwd nvarchar(50),
    @Vat int, 
    @Page  nvarchar(50)
)
as
Begin
    return -3 --- too many Badlogins 
End

Я вызываю эту хранимую процедуру с использованием Entity Framework:

try
{
    string sqlQuery = "exec [dbo].[HB_ValidateLogin_HitAlacarte] @Login, @Pwd, @Vat, @Page";

    var outParam = new SqlParameter();
    outParam.ParameterName = "@return_value";
    outParam.SqlDbType = System.Data.SqlDbType.BigInt;
    outParam.Direction = System.Data.ParameterDirection.Output;

    SqlParameter[] sqlParams = new SqlParameter[]
    {
        new SqlParameter { ParameterName = "@Login",  Value =initRequest.Login, Direction = System.Data.ParameterDirection.Input},
        new SqlParameter { ParameterName = "@Pwd",  Value =initRequest.Pwd, Direction = System.Data.ParameterDirection.Input },
        new SqlParameter { ParameterName = "@Vat",  Value =initRequest.VatNumber, Direction = System.Data.ParameterDirection.Input},
        new SqlParameter { ParameterName = "@Page",  Value =initRequest.Page, Direction = System.Data.ParameterDirection.Input},
        outParam
    };

    using (xmlALaCarteContext)
    {
        List<List<int>> result = xmlALaCarteContext.Database.SqlQuery<List<int>>(sqlQuery, sqlParams).ToList();
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
    Console.WriteLine(ex.StackTrace);
    Console.ReadLine();
}

однако при запускекод, я никогда не получаю -3.Мой outParam всегда имеет значение null.Что я делаю неправильно?Я использую EntityFramework версии 6.0.0.0

1 Ответ

0 голосов
/ 24 октября 2018

Вам необходимо объявить ваш @return_value как параметр OUTPUT в вашей хранимой процедуре, а затем установить его вместо вызова RETURN

CREATE procedure [dbo].[HB_ValidateLogin_HitAlacarte] (
    @Login nvarchar(50),
    @Pwd nvarchar(50),
    @Vat int, 
    @Page  nvarchar(50),
    @return_value int OUTPUT
)

или изменить оператор exec, чтобы он обрабатывал возвращаемое значение, но яне уверен в правильном синтаксисе для использования с вашей платформой, но что-то вроде

string sqlQuery = "exec @return_value =[dbo].[HB_ValidateLogin_HitAlacarte]..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...