Самый быстрый способ узнать, доступен ли SQL Server - PullRequest
1 голос
/ 10 июля 2009

У меня есть программа winform, которая использует репликацию слиянием, чтобы синхронизировать локальный SQL Express с центральным SQL Server в нашей сети. Из-за характера этого приложения процесс синхронизации запускается автоматически при открытии и закрытии приложения. То, как я это делаю (ниже), кажется довольно трудоемким. Что будет быстрее?

Думая нестандартно, вероятно, было бы хорошо, если бы я просто проверил сам Сервер, хотя это могло бы стать дырой для крайнего случая, когда Сервер доступен, но SQL не работает. С другой стороны, возможно, просто проверяю, доступен ли наш домен, хотя это может оставить ту же дыру, я думаю.

Спасибо!

private static bool IsSqlAvailable()
    {
        try
        {
            var conn = new SqlConnection("Data Source=WWCSTAGE;Initial Catalog=Connect;Integrated Security=True");
            conn.Open();
            conn.Close();
            HUD.IsSQLAvailable = true;
            return true;
        }
        catch (Exception)
        {
            HUD.IsSQLAvailable = false;
            return false;
        }
    }

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

Ответы [ 5 ]

3 голосов
/ 10 июля 2009

Я бы обернул свое соединение в предложении использования и, возможно, уменьшил бы время ожидания соединения в моей строке соединения (как правило, если сервер работает, он должен подключаться быстрее, чем по умолчанию), но в остальном это нормально.

2 голосов
/ 11 июля 2009

Я думаю, вы можете просто спросить TCP-порт SQL Server. Но есть проблема, если используются именованные экземпляры.

2 голосов
/ 10 июля 2009

Мой обычный совет в этом сценарии, когда вы проверяете наличие / возможность соединения чего-то, что находится вне вашего контроля: не делайте этого.

Ваш чек может пройти, и через мгновение результат уже не соответствует действительности. Поэтому просто попробуйте сделать все, что вы хотите, при условии, что сервер SQL доступен, и аккуратно обработать неизбежные ошибки.

0 голосов
/ 10 июля 2009

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

Я просто использую простой метод try catch только для connection.open и connection.close и перехватываю исключение в случае сбоя. Вам не нужно устанавливать переменную, если она вам не нужна. Просто верните true или false. В случае сбоя соединения он будет зависать на несколько секунд.

0 голосов
/ 10 июля 2009

Возможно, вы слишком много думаете об этом. Доступность вашего SQL-сервера, по сути, эквивалентна возможности подключения к нему, поэтому я бы сказал, что ваш метод открытия соединения вполне допустим. Мое единственное предложение - назначить HUD.IsSQLAvailable один раз, когда вы вызываете метод, поскольку вы уже получаете возвращаемое значение, вместо того, чтобы назначать его дважды внутри IsSqlAvailable().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...