2017-04-09 5 views
0

自分のTCPアプリケーションを実行しようとしましたが、今はユーザーが終了しているかどうかを確認します。MySQL Async - どのように使用できますか?

私の質問は次のとおりです。mySQL Asyncはどのように使用できますか?

 public static bool CheckUserLogin(string Username,string Password){ 
     try{ 
      if(string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password)){ return false; } 
      if (!System.Text.RegularExpressions.Regex.IsMatch(Username, "^[a-zA-Z0-9\x20]+$")) { return false; } 
      if (!System.Text.RegularExpressions.Regex.IsMatch(Password, "^[a-zA-Z0-9\x20]+$")) { return false; } 
      bool UserExit = false; 
      DataBase_Connection.DB_Conn.OpenAsync(); 
      try{ 
       string c_query = "SELECT COUNT(*) FROM `KoN_Account` WHERE BINARY `AccountName` = @U_Name AND `HashPass` = @P_Pass LIMIT 1;"; 
       using (MySqlCommand CU_cmd = new MySqlCommand(c_query, db_Conn)){ 
        CU_cmd.Parameters.AddWithValue("@U_Name", Username); 
        CU_cmd.Parameters.AddWithValue("@P_Pass", Password); 
        var count = CU_cmd.ExecuteScalar(); 
        UserExit = Convert.ToBoolean(count); 
       } 
      } 
      catch{ 
      } 
      DataBase_Connection.DB_Conn.CloseAsync(); 
      return UserExit; 
     } 
     catch (Exception ex){ 
      LoginConsole.WriteConsoleLoginParams(System.ConsoleColor.Red, "ERROR CheckUserLogin", ex.ToString() + "\nFailed to connect to the database (server shutdown...)"); 
     } 
     return false; 
    } 

私の質問は正しいですか? OpenAsyncCloseAsync

また、どのように使用できますか:ExecuteScalarを非同期の方法で使用しますか?あなたがTask<bool>を返すにboolを返すからあなたの方法を変更し、async修飾子を追加する必要がありますasyncバージョンを使用するためには、あなたの助け

+0

?検証されていないユーザーは他に何ができますか? – efekctive

+0

TCPサーバー用です。多くのユーザーが彼に接続します。 – EastMile

+0

これは[バグ](https://bugs.mysql.com/bug.php?id=70111)です。 –

答えて

0

ため

おかげで、あなたはAsync接尾辞メソッドを使用したいと思うでしょうおよびawait

finallyブロックにはDB_Conn.CloseAsync()もありますが、何らかの形で基本的なエラー処理が既にあるので、空のキャッチを削除してください。

awaitcatchfinallyでのみ使用できますが、C#6以降を使用する場合はご注意ください。

だから例は次のようになります。あなたは非同期ログインを実行する理由

public static async Task<bool> CheckUserLogin(string Username, string Password) 
{ 
    try 
    { 
     if (string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password)) { return false; } 
     if (!System.Text.RegularExpressions.Regex.IsMatch(Username, "^[a-zA-Z0-9\x20]+$")) { return false; } 
     if (!System.Text.RegularExpressions.Regex.IsMatch(Password, "^[a-zA-Z0-9\x20]+$")) { return false; } 
     bool UserExit = false; 
     await DataBase_Connection.DB_Conn.OpenAsync(); 
     try 
     { 
      string c_query = "SELECT COUNT(*) FROM `KoN_Account` WHERE BINARY `AccountName` = @U_Name AND `HashPass` = @P_Pass LIMIT 1;"; 
      using (MySqlCommand CU_cmd = new MySqlCommand(c_query, db_Conn)) 
      { 
       CU_cmd.Parameters.AddWithValue("@U_Name", Username); 
       CU_cmd.Parameters.AddWithValue("@P_Pass", Password); 
       var count = await CU_cmd.ExecuteScalarAsync(); 
       UserExit = Convert.ToBoolean(count); 
      } 
     } 
     finally 
     { 
      await DataBase_Connection.DB_Conn.CloseAsync(); 
     } 
     return UserExit; 
    } 
    catch (Exception ex) 
    { 
     LoginConsole.WriteConsoleLoginParams(System.ConsoleColor.Red, "ERROR CheckUserLogin", ex.ToString() + "\nFailed to connect to the database (server shutdown...)"); 
    } 
    return false; 
} 
関連する問題