c # слишком много аргументов, указанных в процедуре или функции

1

Я написал хранимую процедуру, чтобы проверить, существует ли имя пользователя и пароль в базе данных и соответственно возвращать результаты

Это хранимая процедура

 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

и это мой код С#

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);

    }
}

Я новичок в С#. Я хочу проверить, существует ли имя пользователя из базы данных. Но когда я выполняю код, я получаю сообщение об ошибке "слишком много аргументов, указанных в процедуре или функции".

Может ли кто-нибудь сказать мне, где я делаю ошибку?

благодаря

  • 0
    Не уверен насчет OleDb но в Sql вам придется использовать префикс @ для параметров. Т.е. new OleDbParameter("@userid",username.Text);
  • 1
    Объявите возвращаемое значение в качестве выходного параметра в хранимой процедуре или не добавляйте ReturnVal к параметрам.
Показать ещё 7 комментариев
Теги:
sql-server
stored-procedures

3 ответа

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

и в коде С#:

 SqlParameter returnParameter = cmd.Parameters.Add("result", SqlDbType.Int);
  returnParameter.Direction = ParameterDirection.ReturnValue;
  int id = (int) returnParameter.Value;
  • 0
    Спасибо за ответ. Как отобразить возвращаемый параметр. Например, если моя база данных отправляет сообщение в виде возвращаемого параметра «Логин не существует», как отобразить это сообщение в c # Я надеюсь, что мои сомнения ясны
  • 2
    @Neel Я думаю, что он должен @result int output вместо @result output int
Показать ещё 13 комментариев
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
  • 0
    Спасибо, Ганеш, но варианты, показанные здесь, int Result = Convert.ToInt (returnParameter.Value); это int16, а не int
  • 0
    Ошибки выдачи хранимой процедуры Msg 102, уровень 15, состояние 1, процедура проверки, строка 4 Неверный синтаксис рядом с @ReturnVal. Сообщение 137, Уровень 15, Состояние 1, Проверка процедур, Строка 8 Необходимо объявить скалярную переменную "@ReturnVal". Сообщение 137, Уровень 15, Состояние 1, Проверка процедур, Строка 10 Необходимо объявить скалярную переменную "@ReturnVal".
Показать ещё 3 комментария
0

Если вы используете SQL-сервер, используйте соединение и команду базы данных Sql

Проверь это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню