如何从存储过程中获取返回值

时间:2013-12-23 11:57:01

标签: c# asp.net sql-server

我有以下存储过程:

ALTER PROCEDURE spLogin
       @CAD_WEB_LOGIN_USERNAME varchar(60),
       @CAD_WEB_LOGIN_PASSWORD varchar(60),
       @Result int output
AS
BEGIN
    SELECT
        CAD_NUMBER 
    FROM 
        CMACADDR
    WHERE 
        CAD_WEB_LOGIN_USERNAME = @CAD_WEB_LOGIN_USERNAME 
        AND CAD_WEB_LOGIN_PASSWORD = @CAD_WEB_LOGIN_PASSWORD
END

在C#中,我想执行此查询并获取返回值。

这是我的代码:

int flag = 0;

con.Open();

SqlCommand cmd3 = new SqlCommand("spLogin", con);
cmd3.Connection = con;
cmd3.CommandType = CommandType.StoredProcedure;

cmd3.Parameters.Add("@CAD_WEB_LOGIN_USERNAME", SqlDbType.VarChar).Value = txtUserName.Text;
cmd3.Parameters.Add("@CAD_WEB_LOGIN_PASSWORD", SqlDbType.VarChar).Value = txtPassword.Text;

SqlParameter parm = new SqlParameter("@Return", SqlDbType.Int);
parm.Direction = ParameterDirection.ReturnValue;
cmd3.Parameters.Add(parm);

flag = cmd3.ExecuteNonQuery();

con.Close();
int id = Convert.ToInt32(parm.Value);

我收到错误:

  

过程或函数'spLogin'需要参数'@Result',这是未提供的。

此代码的逻辑错误是什么?

由于

2 个答案:

答案 0 :(得分:4)

将ParameterDirection更改为Output,并将参数名称更改为@Result

SqlParameter parm = new SqlParameter("@Result", SqlDbType.Int);

parm.Direction = ParameterDirection.Output;

cmd3.Parameters.Add(parm);

答案 1 :(得分:3)

由于错误建议'spLogin'需要参数'@Result'

更改

SqlParameter parm = new SqlParameter("@Return", SqlDbType.Int);

SqlParameter parm = new SqlParameter("@Result", SqlDbType.Int);

修改

还更新了您的程序,返回一些值。目前您没有返回任何内容。此外,您不需要在SP中添加额外的参数。

ALTER PROCEDURE Splogin @CAD_WEB_LOGIN_USERNAME VARCHAR(60), 
                        @CAD_WEB_LOGIN_PASSWORD VARCHAR(60)
AS 
  BEGIN 
      Declare @MyResult as INT 
      SELECT @MyResult = cad_number 
      FROM   cmacaddr 
      WHERE  cad_web_login_username = @CAD_WEB_LOGIN_USERNAME 
             AND cad_web_login_password = @CAD_WEB_LOGIN_PASSWORD 

      RETURN @MyResult -- return value
  END