0

Oracle MySQL に接続して特定の行をチェックする関数を作成していますが、機能していないようです。行がDBに既に存在するかどうかを確認する方法を教えてください

 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

1 つの可能性は、正しい英語のスペルは「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 に答える