c在过程或函数中指定的参数太多
本文关键字:参数 太多 过程 函数 | 更新日期: 2023-09-27 18:25:36
我编写了一个存储过程来检查数据库中是否存在用户名和密码,并相应地返回结果
这是存储过程
ALTER proc [dbo].[checkuser]
@userid varchar(20),
@password varchar(20),
@ReturnVal varchar(50) output
As
Begin
if exists(select userid from users where userid=@userid)
set @ReturnVal='Logged in Successfully'
else
set @ReturnVal='Login Failed'
end
这是我的c#代码
private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(
"File Name=E:''Vivek''License Manager''License Manager''login.udl");
try
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("checkuser",conn);
cmd.CommandType = CommandType.StoredProcedure;
OleDbParameter p1=new OleDbParameter("userid",username.Text);
OleDbParameter p2 = new OleDbParameter("password",password.Text);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
var returnParameter = cmd.Parameters.Add("ReturnVal",OleDbType.Integer);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我是c#的新手。我想从数据库中检查用户名是否存在。但当我执行代码时,我会收到一个错误,说"过程或函数中指定的参数太多"。
有人能告诉我哪里出错了吗?
感谢
过程从不返回值。您必须在存储过程中使用输出参数。
SP的变化如下所示:
create proc checkuser
@userid varchar(20),
@password varchar(20)
@result int output
As
Begin
if exists(select userid from users where userid=@userid)
set @result = 0
else
set @result = 1
end
并且在C#代码中:
SqlParameter returnParameter = cmd.Parameters.Add("result", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
int id = (int) returnParameter.Value;
这样尝试:
用以下内容替换您的代码更改
OleDbParameter p1=new OleDbParameter("@userid",username.Text);
OleDbParameter p2 = new OleDbParameter("@password",password.Text);
var returnParameter = cmd.Parameters.Add("@ReturnVal",OleDbType.Integer);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
int Result= Convert.ToInt32(returnParameter.Value);
在程序中
create proc checkuser
@userid varchar(20),
@password varchar(20),
@ReturnVal int output
As
Begin
if exists(select userid from users where userid=@userid)
set @ReturnVal= 0
else
set @ReturnVal= 1
end
如果使用SQL Server,请使用SQL数据库连接并命令
检查此