匯出 (0) 列印
全部展開

作法:使用 ADO.NET 連接到 Azure SQL Database

更新日期: 2014年11月

使用 ADO.NET 連接到 Microsoft Azure SQL Database。不同於內部部署連線,您必須解釋節流或其他可能會終止連線或暫時封鎖新連線的服務錯誤。這種情況稱為暫時性錯誤。若要管理暫時性錯誤,您可以實作重試策略。連接到 Azure SQL Database 時,暫時性錯誤處理應用程式區塊 (Enterprise Library 6 的一部分 – 2013 年 4 月),會有可識別暫時性錯誤狀況的偵測策略。如需詳細資訊,請參閱作法:可靠地連接到 Azure SQL Database

對 Azure SQL Database 的 ADO.NET 連線類似於內部部署連線,差別在於會實作重試策略並使用 ReliableSqlConnection。重試功能和 ReliableSqlConnection 類別是暫時性錯誤處理應用程式區塊的一部分。

若要安裝暫時性錯誤處理應用程式區塊,請參閱How to install Transient Fault Handling Application Block 6.0

使用暫時性錯誤處理應用程式區塊 6.0

  1. 為 Azure SQL Database 節流定義指數型輪詢重試策略。指數型輪詢策略會正常輪詢服務的負載。

    ExponentialBackoff exponentialBackoffStrategy = 
                    new ExponentialBackoff("exponentialBackoffStrategy",
                        retryCount,
                        TimeSpan.FromMilliseconds(minBackoffDelayMilliseconds), 
                        TimeSpan.FromMilliseconds(maxBackoffDelayMilliseconds),
                        TimeSpan.FromMilliseconds(deltaBackoffMilliseconds));
    
    
  2. 將預設策略設為指數型輪詢

    RetryManager manager = new RetryManager(new List<RetryStrategy>
    {
    exponentialBackoffStrategy 
    }, 
    " exponentialBackoffStrategy");
    
    
  3. 設定預設的重試管理員。RetryManager 會提供重試功能。

    RetryManager.SetDefault(manager);
    
    
  4. 定義預設的 SQL 連線重試原則和 SQL 命令重試原則。原則會針對不可靠的動作和暫時性狀況提供重試機制。

    RetryPolicy retryConnectionPolicy = manager.GetDefaultSqlConnectionRetryPolicy();
    RetryPolicy retryCommandPolicy = manager.GetDefaultSqlCommandRetryPolicy();
    
    
  5. 建立會使用 ReliableSqlConnection 重試連線的函數。

    retryConnectionPolicy.ExecuteAction(() =>
                {
      using (ReliableSqlConnection connection = new   
      ReliableSqlConnection(builder.ConnectionString)) …
    
    
  6. 建立會重試命令 (從 ReliableSqlConnection 呼叫 ExecuteCommand()) 的函數。

    retryCommandPolicy.ExecuteAction(() =>
    {
    using (IDataReader reader = connection.ExecuteCommand<IDataReader>(command)) …
    
    

static void Main(string[] args)
        {
            //NOTE: Use appropriate exception handling in a production application.

            //Replace
            //  builder["Server"]: {servername} = Your Azure SQL Database server name
            //  builder["User ID"]: {username}@{servername} = Your Azure SQL Database user name and server name
            //  builder["Password"]: {password} = Your Azure SQL Database password

            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder["Server"] = "{servername}";
            builder["User ID"] = "{username}@{servername}";
            builder["Password"] = "{password}";

            builder["Database"] = "AdventureWorks2012";
            builder["Trusted_Connection"] = false;
            builder["Integrated Security"] = false;
            builder["Encrypt"] = true;

            //1. Define an Exponential Backoff retry strategy for Azure SQL Database throttling (ExponentialBackoff Class). An exponential back-off strategy will gracefully back off the load on the service.
            int retryCount = 4;
            int minBackoffDelayMilliseconds = 2000;
            int maxBackoffDelayMilliseconds = 8000;
            int deltaBackoffMilliseconds = 2000;

            ExponentialBackoff exponentialBackoffStrategy = 
                new ExponentialBackoff("exponentialBackoffStrategy",
                    retryCount,
                    TimeSpan.FromMilliseconds(minBackoffDelayMilliseconds), 
                    TimeSpan.FromMilliseconds(maxBackoffDelayMilliseconds),
                    TimeSpan.FromMilliseconds(deltaBackoffMilliseconds));

            //2. Set a default strategy to Exponential Backoff.
            RetryManager manager = new RetryManager(new List<RetryStrategy>
            {  
                exponentialBackoffStrategy 
            }, "exponentialBackoffStrategy");

            //3. Set a default Retry Manager. A RetryManager provides retry functionality, or if you are using declarative configuration, you can invoke the RetryPolicyFactory.CreateDefault
            RetryManager.SetDefault(manager);

            //4. Define a default SQL Connection retry policy and SQL Command retry policy. A policy provides a retry mechanism for unreliable actions and transient conditions.
            RetryPolicy retryConnectionPolicy = manager.GetDefaultSqlConnectionRetryPolicy();
            RetryPolicy retryCommandPolicy = manager.GetDefaultSqlCommandRetryPolicy();

            //5. Create a function that will retry the connection using a ReliableSqlConnection.
            retryConnectionPolicy.ExecuteAction(() =>
            {
                using (ReliableSqlConnection connection = new ReliableSqlConnection(builder.ConnectionString))
                {
                    connection.Open();

                    IDbCommand command = connection.CreateCommand();
                    command.CommandText = "SELECT Name FROM Production.Product";

                    //6. Create a function that will retry the command calling ExecuteCommand() from the ReliableSqlConnection
                    retryCommandPolicy.ExecuteAction(() =>
                    {
                        using (IDataReader reader = connection.ExecuteCommand<IDataReader>(command))
                        {
                            while (reader.Read())
                            {
                                string name = reader.GetString(0);

                                Console.WriteLine(name);
                            }
                        }
                    });                  
                }
            });

            Console.ReadLine();
        }

使用 Azure SQL 資料庫 應用程式連接到 ADO.NET 中的資料庫時,請考慮下列各點:

  • 使用 SqlConnectionStringBuilder 類別避免資料隱碼攻擊。該類別於 .NET Framework 中提供,可簡化建立連接字串的工作。如需詳細資訊,請參閱連接字串產生器 (ADO.NET)

  • 連接字串可能成為潛在的弱點。如需有關保護您連接字串的詳細資訊,請參閱保護連接資訊 (ADO.NET)

  • 加密連接方式,特別是透過網際網路連接到 Azure SQL 資料庫 時,杜絕攔截式攻擊。將 [加密連接] 設定為 True (Encrypt = True)。將 TrustServerCertificate 連接屬性設定為 False (TrustServerCertificate = False)。

  • 如需有關連接到 Azure SQL 資料庫 中的資料庫的一般考量,請參閱連接到 Azure SQL Database 的方針技術文章 – 閒置連線恢復功能

  • 在開啟 Azure SQL 資料庫 的連線時,請將連接逾時設為 30 秒。

另請參閱

顯示:
© 2015 Microsoft