Exportar (0) Imprimir
Expandir Tudo

Como: conectar-se ao Banco de Dados SQL do Azure usando o ADO.NET

Atualizado: novembro de 2014

Use o ADO.NET para se conectar ao banco de dados SQL do Microsoft Azure. Diferentemente de uma conexão local, você precisa levar em conta a limitação ou outras falhas de serviço que podem encerrar uma conexão ou bloquear temporariamente novas conexões. Essa condição é chamada de uma falha temporária. Para gerenciar falhas temporárias, você deve implementar uma estratégia de repetição. Ao se conectar ao banco de dados SQL do Azure, o Transient Fault Handling Application Block, parte do Enterprise Library 6 – abril de 2013, possui estratégias de detecção que identificam uma condição de falha temporária. Para obter mais informações, consulte Como: Conectar-se de forma confiável a um Banco de Dados SQL do Azure.

Uma conexão ADO.NET com o banco de dados SQL do Azure é semelhante a uma conexão local, exceto na implementação de uma estratégia de repetição e uso de um ReliableSqlConnection. A funcionalidade de repetição e a classe ReliableSqlConnection fazem parte do Transient Fault Handling Application Block.

Para instalar o Transient Fault Handling Application Block, consulte How to install Transient Fault Handling Application Block 6.0.

Usando o Transient Fault Handling Application Block 6.0

  1. Defina uma estratégia de repetição de Retirada Exponencial para limitação do banco de dados SQL do Azure. Uma estratégia de retirada exponencial normalmente retirará a carga no serviço.

    ExponentialBackoff exponentialBackoffStrategy = 
                    new ExponentialBackoff("exponentialBackoffStrategy",
                        retryCount,
                        TimeSpan.FromMilliseconds(minBackoffDelayMilliseconds), 
                        TimeSpan.FromMilliseconds(maxBackoffDelayMilliseconds),
                        TimeSpan.FromMilliseconds(deltaBackoffMilliseconds));
    
    
  2. Defina uma estratégia padrão para Retirada Exponencial.

    RetryManager manager = new RetryManager(new List<RetryStrategy>
    {
    exponentialBackoffStrategy 
    }, 
    " exponentialBackoffStrategy");
    
    
  3. Defina um Gerenciador de Repetição padrão. Um RetryManager fornece a funcionalidade de repetição.

    RetryManager.SetDefault(manager);
    
    
  4. Defina uma política de repetição da Conexão SQL padrão e a política de repetição do Comando SQL. Uma política fornece um mecanismo de repetição para ações não confiáveis e condições transitórias.

    RetryPolicy retryConnectionPolicy = manager.GetDefaultSqlConnectionRetryPolicy();
    RetryPolicy retryCommandPolicy = manager.GetDefaultSqlCommandRetryPolicy();
    
    
  5. Crie uma função que repetirá a conexão usando ReliableSqlConnection.

    retryConnectionPolicy.ExecuteAction(() =>
                {
      using (ReliableSqlConnection connection = new   
      ReliableSqlConnection(builder.ConnectionString)) …
    
    
  6. Crie uma função que repetirá o comando chamando ExecuteCommand() de ReliableSqlConnection.

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

Para conectar-se a um banco de dados no Banco de dados SQL do Azure com um aplicativo ADO.NET, considere os seguintes pontos:

  • Evite ataques de injeção usando a classe SqlConnectionStringBuilder. Ele está disponível no .NET Framework para simplificar a criação da cadeia de conexão. Para obter mais informações, consulte Construtores de cadeia de conexão (ADO.NET).

  • Uma cadeia de conexão apresentará uma vulnerabilidade potencial. Para obter mais informações sobre como proteger sua cadeia de conexão, consulte Protegendo informações de conexão (ADO.NET).

  • Criptografe sua conexão, especialmente quando conectar o Banco de dados SQL do Azure pela Internet, de forma que um ataque com intervenção humana não seja possível. Defina a propriedade de conexão Encrypt como True (Encrypt = True). Defina a propriedade de conexão TrustServerCertificate como False (TrustServerCertificate = False).

  • Para conhecer as considerações gerais sobre como se conectar a bancos de dados no Banco de dados SQL do Azure, consulte Diretrizes para conexão com o Banco de dados SQL do Azure e Artigo Técnico – Resiliência da conexão inativa.

  • Ao abrir uma conexão para um Banco de dados SQL do Azure, defina o tempo limite de conexão como 30 segundos.

Consulte também

A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft