C#检查查询是否返回空集不起作用?

时间:2014-01-30 18:41:49

标签: c# mysql

我一直在努力检查数据库表中是否存在记录。我有以下代码,它无法正常工作。

 MySqlConnection connection = new MySqlConnection("My connection string");
        string check = string.Format("Select COUNT(*) FROM User_Class WHERE user_class_name = '{0}'", TextBox1.Text);
        string query = string.Format("INSERT INTO User_Class (user_class_name) VALUE ('{0}');", TextBox1.Text);
        MySqlCommand cmd = new MySqlCommand(check, connection);
        MySqlCommand cmd2 = new MySqlCommand(query, connection);
        //MySqlDataReader reader;
        connection.Open();
        if (cmd.BeginExecuteNonQuery().Equals(0))//record does not exist
        {
            cmd2.BeginExecuteNonQuery();
            Label1.Text = "User Class Created!";
            Label1.ForeColor = Color.Green;

        }
        else
        {
            Label1.Text = "User Class Already Exists";
            Label1.ForeColor = Color.Red;
        }

此代码总是转到其他情况。我也尝试使用MySqlDataReader执行此操作,但这也无效。为什么它不返回0(或false / null)?检查空回报的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

这里至少有两个问题。

首先,您正在调用BeginExecuteNonQuery - 它不返回整数,它返回IAsyncResult。我强烈怀疑你根本不想处理异步API。

其次,使用ExecuteNonQuery无论如何都不适合查询。我怀疑你实际上想要ExecuteScalar

if ((int) cmd.ExecuteScalar() == 0)

您可能需要投放到long而不是int;我不知道它将返回什么类型的价值。但是,对于“SELECT COUNT”查询来说,这是一个更明智的调用。

然后建议您使用ExecuteNonQuery进行INSERT ...更改代码后使用参数化SQL而不是现在使用的SQL-injection-inviting方法

答案 1 :(得分:1)

答案 2 :(得分:1)

有几点 - 你没有正确调用BeginExecuteNonQuery()命令 - 我认为你不是所有的异步方法。

此外,您正在使用ExecuteNonQuery调用检查 - 只执行查询并返回结果状态 - 除非SQL失败将始终成功,您应该使用:

if ((long)(cmd.ExecuteScalar() ?? 0) == 0)

这将为您提供Count(*)

的结果

最后 - 编写你喜欢的嵌入式SQL让你开始讨厌 - 看看这个:http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html