0

我正在编写一个连接到 Oracle MySQL 以检查特定行的函数,但它似乎不起作用!有人可以告诉我如何检查数据库中是否已经存在一行

 private bool groupAlreadyHasAdmin(string grp) {
 try
        {
            myConn.Open();
            strCmd = "SELECT * FROM users WHERE usergroup=@groupname AND privelege=2 LIMIT 1";
            MySqlCommand myCmd = new MySqlCommand(strCmd, myConn);
            myCmd.Parameters.AddWithValue("groupname", grp);
            if (myCmd.ExecuteNonQuery() > 0)
            {                    
                return true;
            }
            else 
            {                    
                return false;
            } 
        }
        catch (Exception E) { MessageBox.Show(E.Message); }
        return false;
}
4

4 回答 4

2

上面的答案是使用 ExecuteReader 和 ExecuteNonQuery。您可能更喜欢使用简单的 Exists 查询,然后执行 ExecuteScalar,以使事情变得简单。您可以在您的情况下使用以下命令:

using (MySqlCommand cmd = new MySqlCommand()){
    cmd.Connection = con;
    cmd.CommandText = @"SELECT EXISTS(SELECT 1 FROM users WHERE usergroup=@groupname AND privelege=2 LIMIT 1)";
    cmd.Parameters.AddWithValue("groupName", groupName);
    var result = cmd.ExecuteScalar();
    //result will be 1 if it exists, and 0 if it does not..
}
于 2013-09-10T21:59:16.287 回答
1

我终于找到了使用这些代码行的解决方法:

...
return myCmd.ExecuteReader().Read();
...
于 2013-02-19T22:33:38.733 回答
0

一种可能性是正确的英文拼写是“privilege”。也许这个查询会起作用:

strCmd = "SELECT * FROM users WHERE usergroup=@groupname AND privilege=2 LIMIT 1";

此外,您可以这样做,SELECT 1而不是SELECT *- 没有理由带回您不打算使用的数据。

于 2013-02-19T21:44:25.893 回答
0

试一试:先获取行数。

...
return myCommand.ExecuteNonQuery() > 0;
于 2013-02-19T21:47:31.227 回答