Ответ 1
Этот пост в блоге от Майкл Аспенгрен объясняет ошибку message "При отправке запроса на сервер произошла ошибка транспортного уровня.
У меня есть веб-приложение, которое в настоящее время работает в операционной системе Windows XP с базой данных SQL Server 2005 и IIS 6.0.
Теперь мы пытаемся обновить его до IIS 7.0 в базе данных Windows Server 2008 и SQL Server 2008.
Когда я запускаю приложение, он бросает "Произошла ошибка транспортного уровня при отправке запроса на сервер (поставщик: поставщик TCP, ошибка: 0 - существующее соединение было принудительно закрыто удаленным хостом)." Случайно в различные вызовы базы данных.
Я проверил использование "sp_who", что открыто только одно соединение, которое я использую.
Может ли кто-нибудь сказать мне, что может быть причиной этой проблемы?
Этот пост в блоге от Майкл Аспенгрен объясняет ошибку message "При отправке запроса на сервер произошла ошибка транспортного уровня.
Возможно, база данных настроена на автоматическое закрытие? Это было стандартным для баз данных, созданных в старой версии MSDE/Express.
ALTER DATABASE YourDatabaseName SET AUTO_CLOSE OFF;
Больше:
Обзор SQL Server 2005 Express Edition:
Функции, такие как Auto-Close и возможность копирования баз данных в виде файлов, по умолчанию включены в SQL Server Express...
Я не могу вспомнить, какой пакет обновления изменил значение по умолчанию, но новый интерфейс базы данных в версии SP3 для Management Studio Express по умолчанию имеет значение Auto Close
на false
.
Это ошибка, возникающая при подключении к базе данных из-за ошибки сетевого уровня более низкого уровня, которую вы не можете обработать с Sql Server.
Было бы замечательно, что API, используемый для conenct, обрабатывал эту ошибку, но AFAIK это не так. Единственный способ решить эту проблему - повторить попытку подключения к базе данных при возникновении этой ошибки.
Вы должны попытаться повторно подключиться, по крайней мере, пару раз, чтобы убедиться, что ошибка не является постоянной, и если это так, то генерируйте исключение. Мой опыт подсказывает мне, что вы пытаетесь восстановить соединение, в 99,9% случаев вы преуспеете.
Часто он находится в автономном режиме/закрыт или SQL-экземпляр перезапускается/отключен
Ошибки уровня транспорта часто связаны с подключением к серверу sql, который прерывается... обычно в сети.
Время ожидания истекает, как правило, возникает, когда SQL-запрос занимает слишком много времени для запуска. Это сценарий в вашем случае? Как хранимый proc занимает слишком много времени для выполнения или есть пакетные задания, которые выполняются?
В моем случае. У нас есть DELL R720, сетевые платы находятся на борту и PCI Broadcom NetXtreme Gigabit Ethernet. Мы сталкиваемся с двумя проблемами.
Скорость сети очень велика для виртуальных машин HyperV. Решение состоит в том, чтобы отключить "очереди виртуальной машины" в окнах свойств Broadcom nic HyperV. Он находится на вкладке "Дополнительно".
Клиент SQL, имеющий этот уровень транспортного уровня. Это случалось только раз в 10-15 мин. В то же время служба RDP время от времени выкидывает клиента. Решение состоит в том, чтобы отключить "Large Send Offload V2" окна свойств Broadcom nic HyperV. Он находится на вкладке "Дополнительно".
Используйте clearpool (urSQLconnection) вместе с утилитой. Это очистит грязное соединение. и вы можете открыть новое соединение.
Получил это при попытке выполнить команды из нескольких потоков на одном объекте соединения в .net, что было глупой ошибкой. Блокировка или использование отдельного соединения для каждого потока исправляет это.
Проверьте, установлен ли MultipleActiveResultSets=true;
в строке подключения.