Я использовал блок Microsoft.Practice.TransientFaultHandling для повторной логики c. Теперь я переключил свое приложение на. Net 4.8 и использую новую сборку в журнале повторов c для SqlConnection. Мне было интересно, нужна ли мне специальная логика повторов c для моего SqlCommand (я раньше использовал Polly) или это тоже встроено. Нет возможности записать повтор при попытке полагаться на встроенные функции, что делает его действительно сложным проверить.
Microsoft заявляет здесь :
"Есть тонкость. Если во время выполнения запроса возникает временная ошибка, ваш объект SqlConnection не Не пытайтесь повторить операцию подключения. Конечно, он не повторяет ваш запрос. Однако SqlConnection очень быстро проверяет соединение перед отправкой запроса на выполнение. Если бы при быстрой проверке обнаруживается проблема с соединением, SqlConnection повторяет операцию соединения. Если повторная попытка завершится успешно , ваш запрос отправлен на выполнение. "
Я проверил это, просто отключив и повторно подключив inte rnet в пределах интервала времени повтора, и моя команда была выполнена через некоторое время. Так что, похоже, работает для этого простого сценария. Но действительно ли можно положиться на это, или мне все еще нужно реализовать повторную логику c для моего SqlCommand?
Вот мой код:
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectRetryCount = 5;
builder.ConnectRetryInterval = 3;
MyDataSet m_myDataSet = new MyDataSet();
using (SqlConnection sqlConnection = new SqlConnection(builder.ConnectionString))
{
try
{
sqlConnection.Open();
}
catch (SqlException sqlEx)
{
// do some logging
return false;
}
try
{
using (SqlCommand cmd = new SqlCommand(selectCmd, sqlConnection))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(m_myDataSet, tableName);
}
}
}
}