簡體   English   中英

成功連接后連接到數據庫時出現 SocketException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM