c#过程或函数中指定的参数太多

时间:2014-10-06 05:57:53

标签: c# sql-server stored-procedures

我编写了一个存储过程来检查数据库中是否存在用户名和密码,并相应地返回结果

这是存储过程

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

谁能告诉我我在哪里犯错?

谢谢

3 个答案:

答案 0 :(得分:2)

试试这样:

使用以下更改替换您的代码

 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

答案 1 :(得分:2)

过程永远不会返回值。您必须在存储过程中使用输出参数。

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;

答案 2 :(得分:0)

如果您使用的是SQL-Server,请使用Sql数据库连接和命令

Check this