C# 应用程序生成错误:必须在Web Api 2中声明标量变量。此外,还介绍了有关WebApi2中的代码和调试控制器方法的实践
我在这里问了很多问题,因为我是MVC、WebApi和RestService的新手 因此,我正在使用一个应用程序,其中控制器内部调用StoredProcedure,但出现错误: 必须声明标量变量@empid 代码如下:C# 应用程序生成错误:必须在Web Api 2中声明标量变量。此外,还介绍了有关WebApi2中的代码和调试控制器方法的实践,c#,sql-server,asp.net-mvc-4,asp.net-web-api2,C#,Sql Server,Asp.net Mvc 4,Asp.net Web Api2,我在这里问了很多问题,因为我是MVC、WebApi和RestService的新手 因此,我正在使用一个应用程序,其中控制器内部调用StoredProcedure,但出现错误: 必须声明标量变量@empid 代码如下: [HttpGet] [Route("~/api/Login/{EmpID}/{pwd}")] public IHttpActionResult ValidateLoginDetails(string EmpID, string pwd)
[HttpGet]
[Route("~/api/Login/{EmpID}/{pwd}")]
public IHttpActionResult ValidateLoginDetails(string EmpID, string pwd)
{
int a=0;
if (EmpID == null)
EmpID = "";
else a = Int32.Parse(EmpID);
if (pwd == null)
pwd = "";
var val = new SqlParameter()
{ParameterName="@val",Direction=ParameterDirection.Output,SqlDbType=SqlDbType.Int};
var e = new SqlParameter("@empid", SqlDbType.Int) ;
e.Value = a;
//User.Identity.Name;
var y = new SqlParameter("@pwd", SqlDbType.VarChar);
y.Value = pwd;
using (var x = new DB_BgCheckEntities())
{
var retVal = x.Database.SqlQuery<IEnumerable<int>>
("Exec proc_Bgcheck_login @empid,@pwd,@val out", e, y, val);
// var ret = retVal.Single();
//foreach(var ab in retVal)
//{
// Console.WriteLine(ab.ToList());
//}
//retVal.ToList();
x.Database.ExecuteSqlCommand("Exec proc_Bgcheck_login @eid,@pwd,@val out", e, y, val);
if ((int)val.Value == 1)
{
return Ok(1);
}
else return NotFound();
}
}
存储过程:
CREATE PROCEDURE proc_Bgcheck_login
(
@emp_no int,
@pwd varchar(255),
@val int output
)as
BEGIN
SET @val=0;
DECLARE @count int;
SELECT @count=COUNT(*) FROM tbl_User_Login where [Emp No]=@emp_no and [Password]=@pwd;
IF (@count = 1)
BEGIN
SET @val=1;
RETURN @val;
END
ELSE
RETURN @val;
END
GO
我需要问几个问题:
var retVal = dbcontext.Database.SqlQuery<tbl_User_Login>
("Exec proc_Bgcheck_login @empid,@pwd,@val ",e,y, val).ToList();
var retVal=dbcontext.Database.SqlQuery
(“Exec proc_Bgcheck_login@empid,@pwd,@val”,e,y,val).ToList();
谢谢。procedure
proc\u Bgcheck\u login
acceps三个参数。是的,它接受三个参数。我已经交叉检查了我的数据库,它在那里工作,你通过了吗?我可以看到你只传递了val
,这不是params
的一部分是的,我认为这是正确的方法。所以变量e
和y
对你没有用?@AmitKumarGhosh确实,我错了,我面临另一个问题,当我试图执行查询时,var retVal=dbcontext.Database.SqlQuery(“Exec proc_Bgcheck_login@empid,@pwd,@val out”,e,y,val)代码>我没有获取输出参数的值@val
。它总是预定义的,即0。你能告诉我我遗漏了什么吗?不要分配任何默认值,还要检查你是否在proc中实际设置了它。删除默认值后,仍然面临类似问题(现在分配的值为空)。在proc中,它工作良好,我在sqlserver中执行了proc,它在那里工作良好,给出了正确的输出。创建过程proc_Bgcheck_登录(@emp_no int,@pwd varchar(255),@val int output)作为BEGIN SET@val=0;声明@countint;从tbl_用户登录中选择@count=count(*),其中[Emp No]=@Emp_No和[Password]=@pwd;如果(@count=1)开始设置@val=1;返回@val;结束否则返回@val;结束前进
把它放在你的问题中。
var retVal = dbcontext.Database.SqlQuery<tbl_User_Login>
("Exec proc_Bgcheck_login @empid,@pwd,@val ",e,y, val).ToList();