瞬态故障处理 - 打开的ReliableSqlConnection是否自动处理其管理下的SQL命令重试?

时间:2013-03-14 20:33:30

标签: azure azure-sql-database

在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());
    }
}

1 个答案:

答案 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