rushdi obeidat Ответов: 5

Время ожидания истекло до получения соединения из пула. Это могло произойти из-за того, что все объединенные соединения были использованы и был достигнут максимальный размер пула


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

Тайм-аут истек. Время ожидания истекло до получения соединения из пула. Это могло произойти из-за того, что все объединенные соединения были использованы и был достигнут максимальный размер пула. в системе.Данных.База поставщиков.DbConnectionFactory.Метод getconnection(owningConnection соединение с БД) в системе.Данных.База поставщиков.DbConnectionClosed.Содержащие вредоносные элементы(outerConnection объекта dbConnection, connectionFactory DbConnectionFactory) в системе.Данных.Sqlclient как.Объект sqlconnection.Открыть()

Заранее спасибо

5 Ответов

Рейтинг:
39

Christian Graus

Да. Тайм-аут истек. Тайм-аут истек до получения соединения из пула. Возможно, это произошло из-за того, что все объединенные соединения были использованы и был достигнут максимальный размер пула.

Это (простое английское) сообщение означает, что ваш код ждал подключения к базе данных, но тайм-аут ( который вы установили ) истек, прежде чем он смог получить соединение, вероятно, потому, что количество соединений в пуле ( которое вы установили ) было слишком низким для количества соединений, которые вы пытались установить, или был сетевой тайм-аут, то есть соединение между вашим IIS и вашим SQL-сервером было слишком медленным, чтобы обслуживать соединение.


rushdi obeidat

ладно.. но максимальное число подключений в пуле приложений установлено равным 5000

Christian Graus

Тогда это означает, что ваше подключение к SQL-серверу слишком медленное и истекло время ожидания. Как я и сказал. Вы должны подумать, когда задаете вопрос, объясняя, почему вы не думаете, что проблема заключается в том, что говорит Ошибка. В данном случае это предположение, и оно может быть неверным.

Рейтинг:
34

pradiprenushe

Выполните этот запрос в SqlServerStudio

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame


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


rushdi obeidat

спасибо большое, я постараюсь его.

pradiprenushe

добро пожаловать.

Рейтинг:
2

Joy George K

Я получил эту проблему недавно, когда одна функция создает DbDataReader и возвращается к другой функции для итерации. После закрытия dataReader в потребительской функции он не закрывал соединения. Поэтому я использовал приведенный ниже метод для создания DbDataReader, который заставляет закрывать соединение, когда читатель закрывается.

Dim reader As DbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Return reader


Рейтинг:
0

Sr. Rohi Ghatage

получение этой проблемы из-за превышения максимального размера пула.
Примечание: размер пула по умолчанию составляет не более 100 и 15 секунд для таймаута подключения

Чтобы решить эту проблему, проверьте следующие вещи...
1 Вы закрываете соединение после его использования.
Пример:
SqlConnection con= новый SqlConnection(connString);
SqlCommand cmd= new SqlCommand("SELECT * FROM ReatilersDetails", con);
против.Открыть();
SqlDataReader sdr = cmd.Метода executereader();
СДР.Закрывать();
против.Закрывать();

2) явно закройте соединение, когда закончите.
кон.Рядом();

3) используйте соединение в блоке Using.
using(SqlConnection con= new SqlConnection(connString))
{
};


aalhussein

Привет Рохи,
Если я использую слово " использование ", будет ли оно автоматически закрывать соединение после получения данных из БД?
Я отправлю свой код для вашего обзора и буду признателен за ваши комментарии, чтобы улучшить и избежать превышения соединения:
общественная int InsertUpdateDelete(строку в MySQL, словарь и Л;строка, объект=""&ГТ; myPara)
{
int rtn = 0;
используя (sqlcommand, который команду cmd = новый sqlcommand объект(например, кон))
{
УМК.Свойство Commandtype = Значение Commandtype.Текст;
foreach (KeyValuePair<string, object=""> p в myPara)
{
cmd.параметры.AddWithValue(стр. Ключ, С. Значение);
}
использование (con)
{
против.Открыть();
rtn = cmd.Метод executenonquery();
против.Закрывать();
}
}
вернуться Ростехнадзора;
}

getDataSetPassSqlDic публичных данных(строку в MySQL, словарь и Л;строка, объект=""&ГТ; myPara)
{
Набор ДС;
using (SqlConnection cn = new SqlConnection(conStr))
{
используя (sqlcommand, который команду cmd = новый sqlcommand объект(например, СП))
{
foreach (KeyValuePair<string, object=""> p в myPara)
{
cmd.параметры.AddWithValue(стр. Ключ, С. Значение);
}
SqlDataAdapter da = новый SqlDataAdapter(cmd);
ds = новый набор данных();
использование (cn)
{
спицы.Открыть();
да.Заполнить(ДС);
возврат ДС;
}
}
}
}

общественный класс sqldatareader getDrPassSql(строку в MySQL, словарь и Л;строка, объект=""&ГТ; myPara)
{
используя (sqlcommand, который команду cmd = новый sqlcommand объект(например, кон))
{
foreach (KeyValuePair<string, object=""> p в myPara)
{
// можно поставить проверку здесь, чтобы увидеть, является ли значение пустым или нет
cmd.параметры.AddWithValue(стр. Ключ, С. Значение);
}
против.Открыть();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.Значение closeconnection);
возвращение доктора;
}
}

Рейтинг:
0

ank170989

используйте SqlConnection.ClearAllpools(); метод в событии Page_Unload это закроет все соединения

это сработало для меня .

или иным образом явно закройте все соединения


Rohit_shrma

SqlConnection не имеет метода ClearAllpools()