应用程序生成错误:必须声明标量变量在Web Api 2.此外,关于WebApi2中的代码和调试控制器方法的实践
本文关键字:WebApi2 关于 代码 方法 控制器 调试 此外 错误 程序生成 声明 标量 | 更新日期: 2023-09-27 18:09:22
我在这里问了很多,因为我是MVC, WebApi和RestService的新手。
所以,我正在使用一个应用程序,其中StoredProcedure被称为控制器内部,但得到错误:
必须声明标量变量@empid
代码如下:
[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();
}
}
下面的语句正在做我的工作,但我不明白为什么dbcontext不工作
x.Database.ExecuteSqlCommand("Exec proc_Bgcheck_login @eid,@pwd,@val out", e, y, val);
存储过程:
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
几个问题,我需要问:
- 是好的做法,调用StoredProc内部GetMethod,就像我做的。
- 如何实现DTO(数据传输对象)这个方法?我在谷歌上搜索了一下,但没有找到这个概念。
- 控制器内的调试方法,如何逐行执行?
PS:对于这个错误,我浏览了不同的网站和StackOverflow线程,但没有一个解决我的解决方案。
错误:
必须声明标量变量@empid被解析。
正如@amit提到的,我还没有传递@empid和@pwd的参数。
因此,传递参数的正确方法是:var retVal = dbcontext.Database.SqlQuery<tbl_User_Login>
("Exec proc_Bgcheck_login @empid,@pwd,@val ",e,y, val).ToList();
谢谢。