C# 从MySQL数据库中选择数据时,过程的参数数目不正确

C# 从MySQL数据库中选择数据时,过程的参数数目不正确,c#,mysql,winforms,stored-procedures,C#,Mysql,Winforms,Stored Procedures,我试图将包含SQL查询的c#方法转换为对存储过程的调用。该方法在查询应用程序端正常工作,但我得到的错误是:过程dat.checkUsernameSetup的参数数量不正确;应为1,得到0。我不知道为什么会这样 以下是转换前的代码: public bool CheckUsername() { try { MySqlCommand cmd = new MySqlCommand("SELECT * From `tbl_user` WHERE `username

我试图将包含SQL查询的c#方法转换为对存储过程的调用。该方法在查询应用程序端正常工作,但我得到的错误是:过程dat.checkUsernameSetup的参数数量不正确;应为1,得到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;

原因是这是一个返回
bool
的方法,以指示它们是否相等。您的代码正在有效地将
cmd.CommandType
的当前值与
CommandType.storedProcess
进行比较,并丢弃结果。

这很奇怪,在某些方法中,我这样做是有效的,但这种方法似乎不起作用,而且它的工作方式与您的工作方式相同said@johnny在其他方法中,您是使用标准SQL查询还是使用存储过程?
cmd.CommandType
CommandType.Text
)的默认值适用于标准SQL查询,因为它用于文本查询;尝试{MySqlCommand cmd=new MySqlCommand(“GetPlayerUsernames”,Conn);cmd.CommandType.Equals(CommandType.StoredProcedure);MySqlDataReader=cmd.ExecuteReader();而(reader.Read()){playerComboBx.Items.Add(reader.GetString(“username”);}}}catch(Exception ex){MessageBox.Show(ex.Message);}Conn.Close();啊,这似乎是因为你没有实际传递任何参数。根据你的回答,我假设这是有效的,因为它是一个公共void而不是一个公共bool