MySql Connection方法是否支持异步编程?

时间:2018-05-27 21:32:40

标签: c# mysql winforms visual-studio asynchronous

我使用一种简单的方法连接到MySql数据库,但是连接到这个数据库需要一段时间&这导致应用程序处于"没有响应"模式。 现在,我可以使用异步来解决这个问题吗?

脚本是:

Private void button_clicked()
{
MysqlConnection connection = new MysqlConnection(constring);
connection.open();
}

3 个答案:

答案 0 :(得分:1)

MySQL Connector / NET(即MySql.Data)公开了异步ADO.NET方法,例如MySqlConnection.OpenAsyncMySqlCommand.ExecuteNonQueryAsync,但这些方法都是同步执行的。这是Connector / NET中的longstanding bug

您可以通过切换到MySqlConnector(NuGetGitHub)来获得异步数据库操作,这是一种提供异步I / O和更高性能的OSS替代方案。

答案 1 :(得分:-1)

我确信这是可能的。除了像以下(source)构建代码之外:

public Task<DataSet> GetDataSetAsync(string sConnectionString, string sSQL, params SqlParameter[] parameters)
{
    return Task.Run(() =>
    {
        using (var newConnection = new SqlConnection(sConnectionString))
        using (var mySQLAdapter = new SqlDataAdapter(sSQL, newConnection))
        {
            mySQLAdapter.SelectCommand.CommandType = CommandType.Text;
            if (parameters != null) mySQLAdapter.SelectCommand.Parameters.AddRange(parameters);

            DataSet myDataSet = new DataSet();
            mySQLAdapter.Fill(myDataSet);
            return myDataSet;
        }
    });
}

结合使用“await”关键字,可以获得所需的结果。

//Use Async method to get data
DataSet results = await GetDataSetAsync(sConnectionString, sSQL, sqlParams);

还通过添加“异步处理=真实”连接属性(source)来更新连接字符串

我还建议您查看“ OpenAsync ”方法。您可以在docs

中详细了解相关信息

答案 2 :(得分:-2)

最后,我根据@ MikaalAnwar的答案找到了确切的答案!

  

我们不需要在连接字符串中添加任何新选项(如Asynchronous Processing=true);这是针对SQL连接的不适用于MySql。

那么,我们现在该怎么办?

  

我们使任何被尊重的void都具有异步选项async。然后我们添加一个等待任务&amp;运行它(Task.Run)。在这项任务中,我们通过连接完成了我们想要的任务。

例如:(我们不想使用任何数据集)

private async void DBConnect() 
{
   awiat Task.Run(() => 
   MySqlConnection DBConnetion = new MySqlConnection(ConString);
   DBConnection.Open();
});
  

&安培;我们不使用DBConnection.OpenAsync(),因为虚空是异步&amp;我们已经等待了这项任务。

表面处理:)