На некоторых более медленных компьютерах, на которых работает наше приложение (которое находится в папке автозагрузки Windows), когда машина перезагружается и автоматически включается, служба SQL Server все еще находится в состоянии запуска, когда мое приложение запускается. (SqlServer 2005)
Для противодействия этому я проверил состояние службы (MSSQL $ idealsql) и дождался запуска службы.
Public Function isServiceRunning() As Boolean
Dim theServices() As System.ServiceProcess.ServiceController
Dim theservice As System.ServiceProcess.ServiceController
theServices = System.ServiceProcess.ServiceController.GetServices
Dim running As Boolean
For Each theservice In theServices
If String.Equals(theservice.ServiceName, mServiceName, StringComparison.OrdinalIgnoreCase) Then
running = (theservice.Status = ServiceProcess.ServiceControllerStatus.Running)
Exit For
End If
Next
Return running
End Function
Это возвращает правильный результат, как только служба подключается к сети, , но SQLServer требуется некоторое время, прежде чем он полностью заработает после запуска службы.
Обновление
Этот процесс используется только при запуске приложения.
Псевдокод.
Проверка работающей службы (этот процесс)
Проверка базы данных существует
false -> создать базу данных
true -> выполнить любые обновления, необходимые для структур и т. д.
Продолжить выполнение основной программы
Конец обновления
Затем мне нужно проверить наличие нашей базы данных (которая создается динамически, если ее нет), что я делаю, просматривая sysdatabase и обнаруживая, есть ли наша база данных, но еще раз, требуется некоторое время, прежде чем все базы данных будут действительно подключены.
Я также нашел дополнительный код, чтобы проверить создание TempDB и получить дату, когда он был создан, чтобы определить, когда служба подключилась к сети.
SELECT crdate AS StartTime FROM sys.sysdatabases WHERE name = 'tempdb'
Согласно EventVwr, TempDB - первая база данных, подключенная к сети.
Есть ли правильный способ определить, что SQLServer полностью подключен и все базы данных запущены?
Хотя показанный код VB.Net, я не слишком озабочен языком, более того, это просто правильный способ определить, полностью ли подключен сервер базы данных.