[英]SocketException when connecting to a database after once successfully connceting
我正在構建一個 MySQL 類來連接到 MySQL 數據庫。 最初連接到數據庫時,通過SELECT
語句請求的任何數據都會按預期返回。 第二次嘗試連接時,會拋出SocketException
。
這是SELECT
方法的當前實現
public DataSet Select(string command)
{
DataSet dataSet = new DataSet();
using (MySqlConnection conn = new MySqlConnection(LoadConnectionString()))
{
using (MySqlDataAdapter adapter = new MySqlDataAdapter())
{
MySqlCommand cmd = new MySqlCommand(command, conn);
adapter.SelectCommand = cmd;
adapter.Fill(dataSet);
}
}
return dataSet;
}
這個方法是從一個 foreach 循環調用的,就像這樣
foreach (KeyValuePair<int, string> i in sqlCalls)
{
Select(i.Value);
}
這是進行第二次調用時拋出的錯誤
MySql.Data.MySqlClient.MySqlException: '在命令執行期間遇到致命錯誤。'
SocketException: 連接嘗試失敗,因為連接方在一段時間后沒有正確響應,或者因為連接的主機沒有響應而建立連接失敗
我在第一次通話中沒有正確處理某些東西嗎?
在這種情況下,我的連接字符串如下
Server=[server];Database=[db];Port=3306;Uid=[uid];Pwd=[pwd];Connect Timeout=120;
我添加了幾個調試命令來為命令計時,並注意到命令在 60 秒后超時。 這讓我感到困惑,因為連接超時已經設置。 我決定查看MySqlCommand
類的文檔並注意到CommandTimeout屬性。
明確定義此屬性后,一切正常。 這是完整的實現;
public DataSet Select(string command)
{
string connString = LoadConnectionString();
DataSet dataSet = new DataSet();
using (MySqlConnection conn = new MySqlConnection(connString))
{
conn.Open();
using (MySqlDataAdapter adapter = new MySqlDataAdapter())
{
Console.WriteLine(conn.State);
MySqlCommand cmd = new MySqlCommand(command, conn);
cmd.CommandTimeout = 120;
adapter.SelectCommand = cmd;
adapter.Fill(dataSet);
}
conn.Close();
}
return dataSet;
}
我做了類似的事情,我明確地打開和關閉連接:
public DataSet Select(string command)
{
DataSet dataSet = new DataSet();
using (MySqlConnection conn = new MySqlConnection(LoadConnectionString()))
{
conn.Open();
using (MySqlDataAdapter adapter = new MySqlDataAdapter())
{
MySqlCommand cmd = new MySqlCommand(command, conn);
adapter.SelectCommand = cmd;
adapter.Fill(dataSet);
}
conn.Close();
}
return dataSet;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.