Stored procedures 执行应返回int的存储过程

Stored procedures 执行应返回int的存储过程,stored-procedures,entity-framework-6,Stored Procedures,Entity Framework 6,我有一个存储过程,它接受多个输入参数并返回一个整数: 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 我使用实体框架将此存储过程称为: try {

我有一个存储过程,它接受多个输入参数并返回一个整数:

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
我使用实体框架将此存储过程称为:

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();
}
试试看
{
string sqlQuery=“exec[dbo].[HB\u ValidateLogin\u hitalacote]@Login、@Pwd、@Vat、@Page”;
var outParam=新的SqlParameter();
outParam.ParameterName=“@return_value”;
outParam.SqlDbType=System.Data.SqlDbType.BigInt;
outParam.Direction=System.Data.ParameterDirection.Output;
SqlParameter[]sqlParams=新的SqlParameter[]
{
新的SqlParameter{ParameterName=“@Login”,Value=initRequest.Login,Direction=System.Data.ParameterDirection.Input},
新的SqlParameter{ParameterName=“@Pwd”,Value=initRequest.Pwd,Direction=System.Data.ParameterDirection.Input},
新的SqlParameter{ParameterName=“@Vat”,Value=initRequest.VatNumber,Direction=System.Data.ParameterDirection.Input},
新的SqlParameter{ParameterName=“@Page”,Value=initRequest.Page,Direction=System.Data.ParameterDirection.Input},
奥帕兰
};
使用(XML上下文)
{
List result=xmllacartecontext.Database.SqlQuery(SqlQuery,sqlParams.ToList();
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
控制台写入线(例如StackTrace);
Console.ReadLine();
}

然而,当我运行代码时,我从未得到-3。我的outParam的值始终为null。我做错了什么?我正在使用EntityFramework 6.0.0.0版

您需要在存储过程中声明您的
@return\u值
作为输出参数,然后设置它,而不是调用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]..."

没有别的办法了?还有其他(较旧的应用程序)使用相同的存储过程。所以改变它并不是一个真正的选择。我的第二个建议呢?