如何在 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()
,这是没有重试策略的原始调用。但是如果代码使用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
...
【讨论】:
以上是关于如何在 SqlDataAdapter/DataSet 上应用 ReliableSqlConnection 的重试策略的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?