Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL异步-我如何使用它?_C#_Mysql_Asynchronous - Fatal编程技术网

C# MySQL异步-我如何使用它?

C# MySQL异步-我如何使用它?,c#,mysql,asynchronous,C#,Mysql,Asynchronous,我尝试运行自己的TCP应用程序,现在我将检查用户是否退出 我的问题是:如何使用mySQL异步 public static bool CheckUserLogin(string Username,string Password){ try{ if(string.IsNullOrEmpty(Username) || string.IsNullOrEmpty(Password)){ return false; } if (

我尝试运行自己的TCP应用程序,现在我将检查用户是否退出

我的问题是:如何使用mySQL异步

        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;
    }
我的问题是我做的对吗?使用OpenAsync和CloseAsync

另外,我如何以异步方式使用:ExecuteScalar

感谢您的帮助

为了使用异步版本,您需要将方法从返回bool更改为返回任务,并添加异步修饰符,然后您需要使用异步后缀方法并等待它们

我还将在finally块中执行DB_Conn.CloseAsync,并删除空捕获,因为您已经有了某种形式的基本错误处理

请注意,您只能在使用C6和以上时使用“等待”和“最终”

因此,您的示例如下所示:

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;
}

为什么要执行异步登录?未经验证的用户还可以做什么?这是针对TCP服务器的。这么多用户将连接到他。这是一个很好的解决方案。