У меня есть приложение С#, которое извлекает данные из SQL Server, размещенные в несколько уязвимой среде. Я ничего не могу сделать для решения экологических проблем, поэтому мне нужно обращаться с ними как можно более грациозно.
Чтобы сделать это, я хочу повторить операции, которые являются результатом сбоев в инфраструктуре, таких как сбои в сети, серверы SQL, выходящие из строя, поскольку они перезагружаются, тайм-ауты запроса и т.д. В то же время я Не хотите повторять запросы, если они не были выполнены для логических ошибок. Я просто хочу, чтобы те, кто запустили исключение, были до клиента.
Мой вопрос заключается в следующем: как лучше всего различать экологические проблемы (потерянные соединения, тайм-ауты) и другие виды исключений (например, логические ошибки, которые могли бы произойти, даже если бы среда была стабильной).
Существует ли в С# часто используемый шаблон для работы с такими вещами? Например, есть ли свойство, которое я могу проверить на объекте SqlConnection для обнаружения неудачных соединений? Если нет, то как лучше всего подойти к этой проблеме?
Для чего это стоит, мой код не является чем-то особенным:
using (SqlConnection connection = new SqlConnection(myConnectionString))
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = mySelectCommand;
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// Do something with the returned data.
}
}
}