Тайм-аут истек.Период ожидания истек до получения соединения из пула - PullRequest
2 голосов
/ 28 июля 2011

Я довольно новичок в разработке asp.net, поэтому вы можете сказать, что я разработал плохо закодированное приложение, которое выдает мне эту ошибку.

Истекло время ожидания. Время ожидания истекло до получения соединения из пула.

Я попытался выполнить поиск в Google и обнаружил, что это происходит из-за незакрытых соединений в пуле приложений, поэтому я тщательно изучил свое приложение и вставил ключевое слово для всех Sqlconnections, но все же у меня возникла эта проблема, вот пример кода из моего приложения , Все Sqlconnections заключены в использование следующим образом.

    using (Connection = new SqlConnection(CIPConnection))
    {
        string ReturnValue = String.Empty;
        try
        {
            SqlDataReader Reader;
            Connection.Open();
            string CommandText = "SELECT * FROM Users WHERE NAME = @NAME AND PASSWORD = @PASSWORD";
            Command = new SqlCommand(CommandText, Connection);
            Command.Parameters.AddWithValue("@NAME", UserName);
            Command.Parameters.AddWithValue("@PASSWORD", Password);
            Reader = Command.ExecuteReader();
            Reader.Read();
            if (Reader.HasRows)
            {
                Session["ID"] = Reader["ID"];
                Session["NAME"] = Reader["NAME"];
                Session["DEPARTMENT"] = Reader["DEPARTMENT"];

                switch (Reader["DEPARTMENT"].ToString())
                {
                    case "Admin":
                        ReturnValue = "Admin";
                        break;
                    case "Editing":
                        ReturnValue = "Editing";
                        break;
                    case "Sales and Support":
                        ReturnValue = "Sales and Support";
                        break;
                    case "Writing":
                        ReturnValue = "Writing";
                        break;
                    default:
                        ReturnValue = "Sorry";
                        break;
                }
            }
        }
        catch (Exception exp)
        {
            Response.Write(exp.Message.ToString());
        }
        return ReturnValue;
    }

Теперь мой вопрос: нужно ли закрывать Connection даже при использовании блока операторов? Какой будет лучший способ закрыть соединение? (помещая его в блок finally с каждым оператором try?) я должен также использовать оператор using с SqlReader и SqlCommand? Скажите, пожалуйста, лучший способ избавиться от неиспользуемых соединений, чтобы я мог решить эту проблему.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 28 июля 2011

Возможно, проблема связана с объектом SqlDataReader, который не закрыт.Попробуйте блок using:

using (var Reader = Command.ExecuteReader())
{

В качестве идентификатора функция Read возвращает false, если строки не найдены.Таким образом, вы можете сократить это:

Reader.Read();
if (Reader.HasRows)
{

до:

if (Reader.Read())
{
0 голосов
/ 28 июля 2011

Нет, когда он существует, используя блок, он удалит, который закроет и вернет его в пул.Проблема заключается в другом месте, или вы пропустили один.

Завершает ли использование закрытие открытого соединения SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...