【问题标题】:How to apply ReliableSqlConnection's retry policy on SqlDataAdapter/DataSet如何在 SqlDataAdapter/DataSet 上应用 ReliableSqlConnection 的重试策略
【发布时间】:2015-03-25 16:52:03
【问题描述】:

我们在 Azure Sql 连接和命令上应用了 Microsoft 的 Enterprise Library Transient Fault Handling Block

例如,

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(),这是没有重试策略的原始调用。但是如果代码使用DataSetSqlDataAdapter怎么办:

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

我们主要致力于一些遗留代码以添加一些重试策略。

【问题讨论】:

    标签: c# ado.net dataset enterprise-library enterprise-library-6


    【解决方案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
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      相关资源
      最近更新 更多