我编写了一个存储过程来检查数据库中是否存在用户名和密码,并相应地返回结果
这是存储过程
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;
谁能告诉我我在哪里犯错?
谢谢
答案 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数据库连接和命令