从 MySQL 数据库中选择数据时,PROCEDURE 的参数数量不正确
Incorrect Number of Arguments for PROCEDURE when selecting data from MySQL database
我正在尝试将包含 SQL 查询的 c# 方法转换为对存储过程的调用。该方法与查询应用程序端一起正常工作,但我收到错误 Incorrect Number of Arguments for PROCEDURE dat.checkUsernameSetup; expected 1, got 0
。我不确定为什么会这样。
转换前的代码如下:
public bool CheckUsername()
{
try
{
MySqlCommand cmd = new MySqlCommand("SELECT * From `tbl_user` WHERE `username` = @uname;", Conn);
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter();
/*cmd.CommandType.Equals(CommandType.StoredProcedure);*/
cmd.Parameters.AddWithValue("@uname", usernameField.Text);
adapter.SelectCommand = cmd;
adapter.Fill(table);
if (table.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
这是后面的代码:
public bool CheckUsername()
{
try
{
using (MySqlCommand cmd = new MySqlCommand("checkUsernameSignUp", Conn))
{
cmd.CommandType.Equals(CommandType.StoredProcedure);
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter();
cmd.Parameters.AddWithValue("@uname", usernameField.Text);
adapter.SelectCommand = cmd;
adapter.Fill(table);
if (table.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
这是我的存储过程:
drop procedure if exists checkUsernameSignUp;
delimiter //
create procedure checkUsernameSignUp(IN `uname` varchar(100))
BEGIN
SELECT username From `tbl_user` WHERE `username` = uname;
COMMIT;
END//
delimiter ;
我该如何解决这个错误?
注意: Conn 引用了我的连接字符串
你的错误在这里:
cmd.CommandType.Equals(CommandType.StoredProcedure);
应该是:
cmd.CommandType = CommandType.StoredProcedure;
原因是 Equals
是一个 returns 和 bool
来指示它们是否相等的方法。您的代码有效地将 cmd.CommandType
的当前值与 CommandType.StoredProcedure
进行比较并丢弃结果。
我正在尝试将包含 SQL 查询的 c# 方法转换为对存储过程的调用。该方法与查询应用程序端一起正常工作,但我收到错误 Incorrect Number of Arguments for PROCEDURE dat.checkUsernameSetup; expected 1, got 0
。我不确定为什么会这样。
转换前的代码如下:
public bool CheckUsername()
{
try
{
MySqlCommand cmd = new MySqlCommand("SELECT * From `tbl_user` WHERE `username` = @uname;", Conn);
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter();
/*cmd.CommandType.Equals(CommandType.StoredProcedure);*/
cmd.Parameters.AddWithValue("@uname", usernameField.Text);
adapter.SelectCommand = cmd;
adapter.Fill(table);
if (table.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
这是后面的代码:
public bool CheckUsername()
{
try
{
using (MySqlCommand cmd = new MySqlCommand("checkUsernameSignUp", Conn))
{
cmd.CommandType.Equals(CommandType.StoredProcedure);
DataTable table = new DataTable();
MySqlDataAdapter adapter = new MySqlDataAdapter();
cmd.Parameters.AddWithValue("@uname", usernameField.Text);
adapter.SelectCommand = cmd;
adapter.Fill(table);
if (table.Rows.Count > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
这是我的存储过程:
drop procedure if exists checkUsernameSignUp;
delimiter //
create procedure checkUsernameSignUp(IN `uname` varchar(100))
BEGIN
SELECT username From `tbl_user` WHERE `username` = uname;
COMMIT;
END//
delimiter ;
我该如何解决这个错误?
注意: Conn 引用了我的连接字符串
你的错误在这里:
cmd.CommandType.Equals(CommandType.StoredProcedure);
应该是:
cmd.CommandType = CommandType.StoredProcedure;
原因是 Equals
是一个 returns 和 bool
来指示它们是否相等的方法。您的代码有效地将 cmd.CommandType
的当前值与 CommandType.StoredProcedure
进行比较并丢弃结果。