Как применить политику повторных попыток ReliableSqlConnection к SqlDataAdapter/DataSet

Мы применили корпоративную библиотеку Microsoft блок обработки временных сбоев в соединении и командах Azure Sql.

Например,

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
    ...
}

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


person Jerry Bian    schedule 27.01.2015    source источник


Ответы (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
    ...
}
person Jerry Bian    schedule 28.01.2015