Чтобы протестировать, если я могу соединиться со своей базой данных, я выполняю следующий код:
using (SqlConnection connection = new SqlConnection(myConnectionString))
{
try
{
connection.Open();
canConnect = true;
}
catch (SqlException) { }
}
Это работает кроме него, выдает исключение, если связь прервалась. Там какой-либо другой путь состоит в том, чтобы протестировать соединение Sql, которое не выдает исключение?
Редактирование: Для добавления точности я спрашиваю, существует ли простой метод, который делает это, не имея необходимость открывать соединение и исключения выгоды, которые могут произойти
При попытке открыть соединение невозможно избежать исключения, если соединение не может быть открыто. Его можно где-то спрятать в функции, но вы все равно получите исключение.
Он был разработан таким образом, потому что обычно вы ожидаете, что сможете подключиться к базе данных. Неудачное соединение - это исключение .
При этом вы можете проверить текущее состояние соединения в любое время, проверив свойство Состояние
.
Если он вызывает исключение, и вы обрабатываете его в блоке catch, вы уже знаете, что соединение не удалось. Думаю, вы ответили на свой вопрос.
напишите расширение так:
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.