0

SQL Azure での一時的なエラー処理アプリケーション ブロックの使用。このサンプルでは、​​oCmd.ExecuteReader() の特定の再試行ロジックが必須ですか、それとも ReliableSqlConnection が処理しますか?

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

1 に答える 1

0

ReliableSqlConnection接続を確立するプロセスにのみ再試行ロジックを適用します。次のようなものを使用してみてください。

Using oDR As SqlDataReader = oCmd.ExecuteReaderWithRetry(retryPolicy)
          If oDR.Read() Then
                    sb1.Append(oDR("xxxxxx").ToString)
           End If
End Using

使用方法の詳細については、MSDNを参照するか、ここにいくつかの追加の例があります

于 2013-03-14T21:46:41.560 に答える