Тайм-аут истек - PullRequest
       19

Тайм-аут истек

2 голосов
/ 28 марта 2011

Я пишу код на C # и использую LINQ и некоторые хранимые процедуры, я осторожен при открытии и закрытии соединений, но я продолжаю получать эту ошибку.

Timeout expired.  
The timeout period elapsed prior to obtaining a connection from the pool.  
This may have occurred because all pooled connections were in use and max pool size was reached.

мой код работает отлично, кроме случаев возникновения этой ошибки, что я могу с этим поделать?

Спасибо за любые идеи.

 public static List<int> GetIslemIdleribySPbyCariId(int cariId)
    {
        string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

        SqlConnection sqlConn = new SqlConnection(connString);
        sqlConn.Open();

        List<int> islemidleri = new List<int>();
        islemidleri.Clear();

        SqlCommand cmd;
        cmd = new SqlCommand("GetIslemIdleri", sqlConn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@CARIID", cariId));

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                islemidleri.Add(reader.GetInt32(0));

            }
            cmd.Parameters.Clear();
        }

        sqlConn.Close();

        return islemidleri;

    }
    /// <summary>
    /// SP kullanarak dovizturlerini döndürür
    /// </summary>
    /// <returns>string listesi döndürür için döviz türleri var TL, USD vs.</returns>
    public static List<string> GetDovizTurleribySP()
    {
        string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

        SqlConnection sqlConn = new SqlConnection(connString);
        sqlConn.Open();

        List<string> dovizTanimlari = new List<string>();

        string commandGetDovizTanimlari = "EXEC GetDovizTanimlari";
        SqlCommand cmd;
        cmd = new SqlCommand(commandGetDovizTanimlari, sqlConn);

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                dovizTanimlari.Add(reader.GetString(0));
            }

        }
        return dovizTanimlari;

    }

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

Из своего кода вы не закрываете соединение в функции GetDovizTurleribySP.Я бы посоветовал вам использовать оператор using, чтобы обеспечить закрытие соединений, даже если возникает исключение.

Это может выглядеть примерно так

public static List<string> GetDovizTurleribySP()
{
  string connString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer1"].ConnectionString;

  using (SqlConnection sqlConn = new SqlConnection(connString))
  {
    sqlConn.Open();

    List<string> dovizTanimlari = new List<string>();

    string commandGetDovizTanimlari = "EXEC GetDovizTanimlari";
    SqlCommand cmd;
    cmd = new SqlCommand(commandGetDovizTanimlari, sqlConn);

    using (var reader = cmd.ExecuteReader())
    {
      while (reader.Read())
      {
        dovizTanimlari.Add(reader.GetString(0));
      }

    }
    return dovizTanimlari;
  }
}
1 голос
/ 28 марта 2011

После просмотра вашего кода есть 2 вещи, на которые я хочу обратить внимание: оберните ваши SqlCommand, DataReader и sqlConnection с помощью операторов (да, вложенных с помощью операторов), а также при создании списка вам не нужно вызывать clear () впоследствии как список должен быть уже инициализирован в emtpy (по крайней мере, я так думаю в c #).

0 голосов
/ 09 марта 2016

Тестирование и тестирование:

Close(); 
Dispose(); 
SqlConnection.ClearPool(connection); 
SqlConnection.ClearAllPools(); 

Используя выражение, в частности, я обнаружил, что проблема «открытых пулов» для каждого OpenConnection не использует поддерживаемый «пул» (AWAITING COMMAND), вызывающий насыщение в клиентском приложении ASP.NET (единственный способ - перезапустить IIS, чтобы выпустить), я понял, что это вызов строки подключения в .config:

*System.Configuration.ConfigurationManager.ConnectionStrings ["ConnectionSQL"] ConnectionString.;*

По-видимому, он вызывает внешнюю сборку, вызывая "разницу" в строке подключения или хэше.

Решение:

Я сложил сборку:

System.Configuration"** and replacement implicitly invoking: ConfigurationManager.ConnectionStrings ["ConnectionSQL"] ConnectionString;

Это решило проблему, больше "Пулы" не выполнялись каждым "Open ()".

...