从 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 进行比较并丢弃结果。