Я написал хранимую процедуру, чтобы проверить, существует ли имя пользователя и пароль в базе данных и соответственно возвращать результаты
Это хранимая процедура
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);
}
}
Я новичок в С#. Я хочу проверить, существует ли имя пользователя из базы данных. Но когда я выполняю код, я получаю сообщение об ошибке "слишком много аргументов, указанных в процедуре или функции".
Может ли кто-нибудь сказать мне, где я делаю ошибку?
благодаря
Процедура никогда не возвращает значение. Вы должны использовать выходной параметр в хранимой процедуре.
Изменения в 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;
@result int output
вместо @result output int
Попробуйте вот так:
Замените свой код изменениями подписей
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-сервер, используйте соединение и команду базы данных Sql
OleDb
но в Sql вам придется использовать префикс@
для параметров. Т.е.new OleDbParameter("@userid",username.Text);
ReturnVal
к параметрам.