我有以下存储过程:
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',这是未提供的。
此代码的逻辑错误是什么?
由于
答案 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