c#MySqlCommand.ExecuteNonQuery()返回-1

c#MySqlCommand.ExecuteNonQuery()返回-1,c#,mysql,insert,executenonquery,C#,Mysql,Insert,Executenonquery,我试图在C#中执行一个SQL请求,以了解用户是否已在我的数据库中注册。为此,我使用以下源代码: public bool pseudoDispo(string pseudo) { // Ouverture de la connexion SQL this.OpenConnection(); // Création d'une commande SQL en fonction de l'objet connection

我试图在C#中执行一个SQL请求,以了解用户是否已在我的数据库中注册。为此,我使用以下源代码:

    public bool pseudoDispo(string pseudo)
    {
        // Ouverture de la connexion SQL
        this.OpenConnection();

        // Création d'une commande SQL en fonction de l'objet connection
        MySqlCommand cmd = this.connection.CreateCommand();
        cmd.CommandText = "SELECT COUNT(*) FROM `user` WHERE `pseudo` = '" + pseudo + "'";

        int test = cmd.ExecuteNonQuery();
        MessageBox.Show(test.ToString());

        // Exécution de la commande SQL
        if (cmd.ExecuteNonQuery() == 1)
        {
            this.connection.Close();
            MessageBox.Show("Registered");
            return true;
        }
        else
        {
            this.connection.Close();
            MessageBox.Show("Not Registered");
            return false;
        }
    }
但问题是
MySqlCommand.ExecuteNonQuery()
总是返回-1,我不知道为什么。我的请求似乎有效,因为它在phpmyadmin上返回了良好的结果(如果已注册,则返回1;如果未注册,则返回0)

有没有人帮我解释一下我做错了什么

谢谢!

编辑:我一直试图使用ExecuteScalar()以另一种方式执行我的函数,但现在我遇到了一些问题,因为它总是返回0。我显然不明白什么,但我甚至不知道。。。我可以获得更多关于ExecuteScalar()和这类函数的信息吗? 我试图将其转换为字符串,似乎cmd请求一个Int64。所以我像那样更新了我的代码,但仍然不起作用。我对自己缺乏知识感到非常沮丧,但无论如何,以下是代码:

    public int pseudoDispo(string pseudo)
    {
        Int64 dispo_pseudo = 0;
        string sql = "SELECT COUNT(*) FROM `user` WHERE `pseudo` = '[pseudo] = ?' ";

        MySqlCommand cmd = new MySqlCommand(sql);
        try
        {
            this.OpenConnection();

            OleDbCommand dbcommand = new OleDbCommand(sql);

            dbcommand.Parameters.AddWithValue("@p1", pseudo);
            dbcommand.CommandType = CommandType.Text; 

            dispo_pseudo = (Int64)dbcommand.ExecuteScalar();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        return (int)dispo_pseudo;
    }

您正在调用
ExecuteNonQuery
,尽管尝试执行。。。询问。您应该使用
ExecuteScalar
-或
ExecuteQuery
并检查是否有任何结果


ExecuteNonQuery
专门用于insert/delete/update SQL语句,返回的数字是受影响的行数

根据以下文件:

对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为-1


(顺便说一句,您几乎可以肯定每次都要创建一个新连接,并对正在使用的所有一次性对象使用
using
语句,例如
MySqlCommand

如前所述,您正在尝试从查询中获取结果。ExecuteOnQuery仅适用于不返回结果的sql语句

试着这样做:

    string strResult;
    SqlDataReader sqlResult = cmd.ExecuteReader();
            while (sqlResult.Read())
            {
               strResult  = result[0].ToString();
            }

ExecuteNonQuery()
不用于
SELECT
语句。您可能正在查找
ExecuteScalar()
。请看备注部分。谢谢,但我在int中强制转换ExecuteScalar()时仍然遇到问题。Visual Studio告诉我“无效强制转换”。下面是代码:
intcount=(int)cmd.ExecuteScalar();如果(count==1){this.connection.Close();MessageBox.Show(“已注册”);返回true;}否则{this.connection.Close();MessageBox.Show(“未注册”);返回false;}
Right,因此,在不强制转换的情况下查看调试器中的结果,以查看实际类型,这样您就知道应该强制转换为什么。