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#的新手。我想从数据库中检查用户名是否存在。但当我执行代码时,我会收到一个错误,说"过程或函数中指定的参数太多"。

有人能告诉我哪里出错了吗?

感谢

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数据库连接并命令

检查此