应用程序生成错误:必须声明标量变量在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

几个问题,我需要问:

  1. 是好的做法,调用StoredProc内部GetMethod,就像我做的。
  2. 如何实现DTO(数据传输对象)这个方法?我在谷歌上搜索了一下,但没有找到这个概念。
  3. 控制器内的调试方法,如何逐行执行?

PS:对于这个错误,我浏览了不同的网站和StackOverflow线程,但没有一个解决我的解决方案。

应用程序生成错误:必须声明标量变量在Web Api 2.此外,关于WebApi2中的代码和调试控制器方法的实践

错误:

必须声明标量变量@empid被解析。

正如@amit提到的,我还没有传递@empid@pwd的参数。

因此,传递参数的正确方法是:
var retVal = dbcontext.Database.SqlQuery<tbl_User_Login>
            ("Exec proc_Bgcheck_login @empid,@pwd,@val ",e,y, val).ToList();

谢谢。