Протестируйте sql соединение, не выдавая исключение

Чтобы протестировать, если я могу соединиться со своей базой данных, я выполняю следующий код:

using (SqlConnection connection = new SqlConnection(myConnectionString))
{
   try
   {
      connection.Open();
      canConnect = true;
   }
   catch (SqlException) { }
}

Это работает кроме него, выдает исключение, если связь прервалась. Там какой-либо другой путь состоит в том, чтобы протестировать соединение Sql, которое не выдает исключение?

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

8
задан Alexandre Pepin 8 April 2010 в 17:20
поделиться

3 ответа

При попытке открыть соединение невозможно избежать исключения, если соединение не может быть открыто. Его можно где-то спрятать в функции, но вы все равно получите исключение.

Он был разработан таким образом, потому что обычно вы ожидаете, что сможете подключиться к базе данных. Неудачное соединение - это исключение .

При этом вы можете проверить текущее состояние соединения в любое время, проверив свойство Состояние .

12
ответ дан 5 December 2019 в 09:24
поделиться

Если он вызывает исключение, и вы обрабатываете его в блоке catch, вы уже знаете, что соединение не удалось. Думаю, вы ответили на свой вопрос.

3
ответ дан 5 December 2019 в 09:24
поделиться

напишите расширение так:

public static class Extension{
 public static bool CanOpen(this SqlConnection connection){
   try{
    if(connection == null){ return false; }

    connection.Open();
    var canOpen = connection.State == ConnectionState.Open;
    connection.close();
    return canOpen;
 }
 catch{
  return false;
 }
}

Затем вы можете использовать его как:

 using(var connection = new SqlConnection(myConnectionString)){
      if(connection.CanOpen()){
       // NOTE: The connection is not open at this point...
       // You can either open it here or not close it in the extension method...
       // I prefer opening the connection explicitly here...
     }
}

HTH.

3
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: