![](/img/trans.png)
[英]Getting “The connection does not support MultipleActiveResultSets” in a ForEach with async-await
[英]Does MySql Connection methods support async programming?
我正在使用一種簡單的方法連接到 MySql 數據庫,但連接到該數據庫需要一段時間,這會導致應用程序處於“無響應”模式。 現在,我可以使用異步來解決這個問題嗎?
腳本是:
Private void button_clicked()
{
MysqlConnection connection = new MysqlConnection(constring);
connection.open();
}
MySql.Data.MySqlClient.MySqlConnection.OpenAsync() 執行同步,而 MySqlConnector.MySqlConnection.OpenAsync() 執行異步
我相信這是可能的。 除了像下面這樣構造你的代碼( 源代碼):
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);
還通過添加“ Asynchronous Processing=true ”連接屬性( 源)來更新連接字符串
我還建議您查看“ OpenAsync ”方法。 您可以在文檔中閱讀更多相關信息。
最后,我根據@MikaalAnwar 的回答找到了確切的答案!
我們不需要向連接字符串添加任何新選項(如
Asynchronous Processing=true
); 這適用於 SQL 連接,不適用於 MySql。
那么,我們現在應該怎么做?
我們使任何被尊重的 void 具有 async 選項
async
。 然后我們添加一個等待任務並運行它(Task.Run
)。 在這項任務中,我們可以用我們的連接做任何我們想做的事情。
例如:(我們不想使用任何數據集)
private async void DBConnect(String connectionString)
{
await Task.Run(() =>
{
MySqlConnection dbConnection = new MySqlConnection(connectionString);
dbConnection.Open();
}
);
}
& 我們不使用
DBConnection.OpenAsync()
因為 void 是異步的 & 我們使用了 await 來完成任務。
完成的:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.