c# MySqlCommand.ExecuteNonQuery() return -1
c# MySqlCommand.ExecuteNonQuery() return -1
我正在尝试在 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()
总是 returns -1 我不知道为什么。我的请求似乎有效,因为它 returns 我在 phpmyadmin 上获得了良好的结果(如果已注册则为 1,如果未注册则为 0)。
有没有人可以帮助我并解释我做错了什么?
谢谢!
编辑:我一直在尝试通过使用 ExecuteScalar() 以另一种方式执行我的功能,但现在我遇到了一些麻烦,因为它总是 returns 我 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/updateSQL语句,返回的数字是受影响的行数。
来自 IDbCommand.ExecuteNonQuery
的文档:
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1.
(顺便说一句,您几乎可以肯定每次都创建一个新连接,并对您正在使用的所有一次性对象使用 using
语句,例如 MySqlCommand
。)
如前所述,您正在尝试从查询中获取结果。 ExecuteNonQuery 仅适用于没有 return 结果的 sql 语句。
尝试这样的事情:
string strResult;
SqlDataReader sqlResult = cmd.ExecuteReader();
while (sqlResult.Read())
{
strResult = result[0].ToString();
}
我正在尝试在 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()
总是 returns -1 我不知道为什么。我的请求似乎有效,因为它 returns 我在 phpmyadmin 上获得了良好的结果(如果已注册则为 1,如果未注册则为 0)。
有没有人可以帮助我并解释我做错了什么?
谢谢!
编辑:我一直在尝试通过使用 ExecuteScalar() 以另一种方式执行我的功能,但现在我遇到了一些麻烦,因为它总是 returns 我 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/updateSQL语句,返回的数字是受影响的行数。
来自 IDbCommand.ExecuteNonQuery
的文档:
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1.
(顺便说一句,您几乎可以肯定每次都创建一个新连接,并对您正在使用的所有一次性对象使用 using
语句,例如 MySqlCommand
。)
如前所述,您正在尝试从查询中获取结果。 ExecuteNonQuery 仅适用于没有 return 结果的 sql 语句。
尝试这样的事情:
string strResult;
SqlDataReader sqlResult = cmd.ExecuteReader();
while (sqlResult.Read())
{
strResult = result[0].ToString();
}