SqlException, когда база данных не запущена, но SQL Server готов к подключению
Я имею дело с довольно большой задержкой между состоянием «готовых к подключению» SQL Server и временем запуска моей базы данных. Иногда это занимает более 2 минут. Вот почему я иногда пытаюсь подключиться к базе данных, прежде чем она будет в сети. Знаете ли вы, как сократить время между «готовыми к подключению» и начатой базой данных? Или как я могу определить, что db подключен к сети из моего приложения C #?
В основном у меня есть некоторый «кеш» соединений по строке подключения. Это происходит для первого соединения, конечно, поэтому мой код для соединений довольно прост:
var result = new SqlConnection(); result.ConnectionString = "some connection string here"; try { result.Open() } catch (Exception ex) { //some logging stuff here throw; }
Это исключение C #:
- Продолжайте получать ошибку: процедура или функция 'usp_StoredProcName' ожидает параметра '@inputVal', который не был поставлен
- Зачем использовать более короткие поля VARCHAR (n)?
- Как использовать разные подзапросы с SQL MERGE
- Обновите данные для нескольких отношений в базе данных
- Проблема производительности с хранимой процедурой SQL Server
System.Data.SqlClient.SqlException: не удается открыть базу данных «XXX», запрошенную при входе в систему. Ошибка входа в систему.
Это журнал SQL Server:
2014-03-31 08: 21: 05.65 – SQL Server теперь готов для клиентских подключений. Это информационное сообщение; От пользователя не потребуется никаких действий.
2014-03-31 08: 21: 09.21 – Восстановление завершено для модели базы данных (идентификатор базы данных 3) за 1 секунду (анализ 234 мс, повтор 0 мс, отмена 514 мс). Это только информационное сообщение. От пользователя не потребуется никаких действий.
2014-03-31 08: 21: 11.52 – Ошибка: 18456, уровень серьезности: 14, состояние: 38.
2014-03-31 08: 21: 11.52 – Ошибка входа для пользователя «YYY». Причина: Не удалось открыть явно указанную базу данных. [КЛИЕНТ:]
2014-03-31 08: 21: 13.88 – Очистка базы данных tempdb.
2014-03-31 08: 21: 21.38 – Восстановление завершено для базы данных msdb (идентификатор базы данных 4) за 2 секунды (анализ 327 мс, повтор 0 мс, отмена 468 мс.) Это только информационное сообщение. От пользователя не потребуется никаких действий.
2014-03-31 08: 21: 32.98 – Запуск базы данных «tempdb».
2014-03-31 08: 21: 40.30 – Транспортировка протокола Service Broker отключена или не настроена.
2014-03-31 08: 21: 40.41 – Транспортировка протокола зеркального отображения базы данных отключена или не настроена.
2014-03-31 08: 21: 41.50 – Восстановление завершено. Это информационное сообщение. От пользователя не потребуется никаких действий.
2014-03-31 08: 21: 41.52 – Начат запуск менеджера сервис-брокера.
2014-03-31 08: 23: 41.87 – Запуск базы данных «XXX».
- По-видимому, невозможно полностью заменить модель данных Entity Framework из базы данных
- Как запросить все события в определенный день, используя модель SQL Server sysschedules?
- MERGE - Несколько случаев, КОТОРЫЕ СОБИРАЛИСЬ С ПОМОЩЬЮ
- Оператор SQL Server MERGE с «DUAL» в разделе использования
- Проблемы с SQL Server при чтении столбцов с помощью внешнего ключа
- Почему WHEN MATCHED 'не может появляться более одного раза в предложении UPDATE в заявлении MERGE?
- Могу ли я объединять таблицы SQL Server, если они имеют не одну и ту же структуру?
- Как отслеживать обновления баз из приложения?
Исходя из этой ссылки , наилучшей практикой является запрос значения свойства Collation.
База данных, которая только что появилась в Интернете, необязательно готова к подключению. Чтобы определить, когда база данных может принимать соединения, запросите столбец collation_name для sys.databases или свойство Collation для DATABASEPROPERTYEX.
Поэтому, когда свойство Collation не равно null, база данных готова к подключению. Запрос выглядит так:
SELECT DATABASEPROPERTYEX('MyDatabase', 'Collation')