在SQL Azure中使用瞬态故障处理应用程序块。 在此示例中,oCmd.ExecuteReader()的特定重试逻辑是必需的还是ReliableSqlConnection会处理它?</ p>
Using oCmd As New SqlCommand()
strSQL = "SELECT xxxxxx.* FROM xxxxxx"
oCmd.CommandText = strSQL
Using oConn As New ReliableSqlConnection(Cs, retryPolicy)
oConn.Open()
oCmd.Connection = oConn
Using oDR As SqlDataReader = oCmd.ExecuteReader()
If oDR.Read() Then
sb1.Append(oDR("xxxxxx").ToString)
End If
End Using
End Using
End Using
*更新*
从下面的响应中,如果我从ReliableSqlConnect对象的上下文创建SqlCommand对象,我也可以将重试行为扩展到该命令,如本页所述 http://geekswithblogs.net/ScottKlein/archive/2012/01/27/understanding-sql-azure-throttling-and-implementing-retry-logic.aspx
“下面的下一个代码示例说明如何使用RetryPolicy类创建重试策略,指定重试次数和重试之间的固定时间。然后将此策略应用于ReliablSqlConnection,作为连接的策略和策略命令。“
RetryPolicy myretrypolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(3, TimeSpan.FromSeconds(30));
using (ReliableSqlConnection cnn = new ReliableSqlConnection(connString, myretrypolicy, myretrypolicy))
{
try
{
cnn.Open();
using (var cmd = cnn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM HumanResources.Employee";
using (var rdr = cnn.ExecuteCommand<IDataReader>(cmd))
{
//
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
答案 0 :(得分:0)
ReliableSqlConnection
仅将重试逻辑应用于建立连接的过程。尝试使用这样的东西:
Using oDR As SqlDataReader = oCmd.ExecuteReaderWithRetry(retryPolicy)
If oDR.Read() Then
sb1.Append(oDR("xxxxxx").ToString)
End If
End Using
有关使用情况的更多信息,您可以参考MSDN或其他examples here。