Что должен проверить лучший метод, существует ли SQL-сервер или нет?
Я пробую Microsoft. SqlServer. Управление. Smo. Сервер. PingSqlServerVersion () и это хорошо работает, если сервер существует и доступный. Но это довольно симпатичный медленный, если нет такого сервера.
Есть ли немного достаточно быстро метод для проверки, даже не определяя удостоверения пользователя (только имя сервера), если сервер существует?
Что Вы рекомендуете использовать?
Вы можете просто использовать TcpClient класс для запроса сервера и проверки, открыт ли определенный порт, может быть что-то вроде этого:
using System.Net;
using System.Net.Sockets;
public bool CheckServerAvailablity(string serverIPAddress, int port)
{
try
{
IPHostEntry ipHostEntry = Dns.Resolve(serverIPAddress);
IPAddress ipAddress = ipHostEntry.AddressList[0];
TcpClient TcpClient = new TcpClient();
TcpClient.Connect(ipAddress , port);
TcpClient.Close();
return true;
}
catch
{
return false;
}
}
Вы все еще можете использовать Microsoft.SqlServer.Management.Smo.Server.PingSqlServerVersion ()
, но использовать его асинхронно. например вы можете вызвать его через класс BackWorker . Событие DoWork вызовет Microsoft.SqlServer.Management.Smo.Server.PingSqlServerVersion ()
. RunWorkerCompleted просто установит для логической переменной значение true. Таким образом, вы можете запустить его, подождать сколько хотите, проверить логическое значение, и если оно не соответствует действительности, вы узнаете, что сервер SQL еще не ответил, и вы можете отменить BackgroundWorker.
Вы можете попробовать открыть сокет tcp на порт 1433 (порт sql по умолчанию) с коротким таймаутом и посмотреть, ответит ли он.
Для этого необходимо, чтобы на SQL-сервере был включен протокол TCP/IP.
Чтобы добавить к Mikael's, вы также можете сначала пинговать хост, так как он будет реагировать быстрее всего, если сервер не работает.
Конечно, все это предполагает, что вы пытаетесь добраться до удаленного сервера по TCP/IP.