如何在 SqlDataAdapter/DataSet 上应用 ReliableSqlConnection 的重试策略

Posted

技术标签:

【中文标题】如何在 SqlDataAdapter/DataSet 上应用 ReliableSqlConnection 的重试策略【英文标题】:How to apply ReliableSqlConnection's retry policy on SqlDataAdapter/DataSet 【发布时间】: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
    ...

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

【问题讨论】:

【参考方案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
    ...

【讨论】:

以上是关于如何在 SqlDataAdapter/DataSet 上应用 ReliableSqlConnection 的重试策略的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?