2

Мы применили корпоративную библиотеку Microsoft Transient Fault Handling Block по соединению и командам Azure Sql.Как применить политику повторения надежныхSqlConnection для SqlDataAdapter/DataSet

Например,

using(var sqlConnection = new ReliableSqlConnection(_connectionString, _connectionRetry, _commandRetry) 
{ 
    var command = sqlConnection.CreateCommand(); 
    command.CommandText = "..."; 
    sqlConnection.Open(); 

    using(var reader = sqlConnection.ExecuteCommand<SqlDataReader>(command)) 
    { 
     ... 
    } 
} 

Он будет работать на таких, как command.ExecuteReader(), что первоначальный вызов без повторов политики. Но что, если код использует DataSet и SqlDataAdapter:

using(var sqlConnection = new ReliableSqlConnection(_connectionString, _connectionRetry, _commandRetry) 
{ 
    var command = sqlConnection.CreateCommand(); 
    command.CommandText = "..."; 
    sqlConnection.Open(); 

    // how to convert below codes to right way? 
    var adapter = new SqlDataAdapter(command); 
    var dataSet = new DataSet(); 
    adapter.Fill(dataSet); 

    // handle dataSet 
    ... 
} 

Мы в основном работаем над некоторым унаследованным кодом, чтобы добавить некоторую стратегию повтора.

ответ

1

Хорошо, я нашел решение для этого:

using(var sqlConnection = new ReliableSqlConnection(_connectionString, _connectionRetry, _commandRetry) 
{ 
    var command = sqlConnection.CreateCommand(); 
    command.CommandText = "..."; 
    sqlConnection.Open(); 

    var dataReader = sqlConnection.ExecuteCommand<SqlDataReader>(); 
    var dataTable = new DataTable(); 
    dataTable.Load(dataReader); 

    // handle dataTable, in our case the data set only returns one table, so it's ok 
    ... 
}