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