Exportar (0) Imprimir
Expandir Tudo
0 de 1 pessoas classificaram isso como útil - Avalie este tópico

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

Atualizado: dezembro de 2013

Usar o ADO.NET para conectar-se a um banco de dados no Microsoft Banco de dados SQL do Windows Azure é muito semelhante à conexão com uma instância do SQL Server local. Este tópico descreve algumas considerações sobre a conexão com o Banco de dados SQL do Windows Azure e fornece um aplicativo de console de exemplo que você pode usar para começar. Para obter mais informações gerais sobre a conexão com uma fonte de dados com o ADO.NET, consulte Conectando a uma fonte de dados (ADO.NET).

Considerações

Para conectar-se a um banco de dados no Banco de dados SQL 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 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).

  • Consulte as considerações gerais sobre como conectar-se a bancos de dados no Banco de dados SQL em Diretrizes para conexão com o Banco de dados SQL do Windows Azure.

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

Problemas conhecidos ao conectar um Banco de Dados SQL com ADO.NET no .NET 4.0 e versões anteriores

As mensagens de erro a seguir são usadas nas versões do SqlClient anteriores ao .NET 4.5:

Step Name : Read Query on Instance Management DB \n System.Data.SqlClient.SqlException (0x80131904): The instance of SQL Server you attempted to connect to does not support encryption.
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 
at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity)
at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject)
at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)

Esse erro indica uma falha durante o processo de logon e não é uma falha de criptografia. A partir do .NET 4.5, o ADO.NET exibe uma mensagem de erro mais precisa:

A connection was successfully established with the server, but then an error occurred during the pre-login handshake.

Exemplo de aplicativo de console

O exemplo a seguir é um aplicativo de console que se conecta com o Banco de dados SQL do Windows Azure. O aplicativo de console executa as seguintes etapas:

  1. O aplicativo de console usa um objeto SqlConnectionStringBuilder para se conectar com o banco de dados master no Banco de dados SQL do Windows Azure. O aplicativo cria um banco de dados cujo nome vem da cadeia de caracteres sampleDatabaseName.

  2. Em seguida, o aplicativo de console usa um segundo objeto SqlConnectionStringBuilder para se conectar com o novo banco de dados.

  3. Depois de conectado, o aplicativo de console usa o segundo objeto SqlConnectionStringBuilder para criar uma tabela de banco de dados e executar uma série de instruções DML (linguagem de manipulação de dados).

  4. Por fim, o aplicativo de console retorna os dados ao console antes e depois das alterações dos dados.

Usando este exemplo

Para usar este exemplo no Visual Studio com seu servidor do Banco de dados SQL, execute as seguintes etapas:

  1. Abra o Visual Studio e crie um aplicativo de console.

  2. Substitua o código do arquivo de programa pelo código deste exemplo.

  3. Substitua <ProvideUserName> pelo nome de um logon do Banco de dados SQL do Windows Azure que foi atribuído à função dbmanager. Observação: se você usar o formato de nome de usuário login@server, a parte server do nome deve coincidir com a primeira parte do nome totalmente qualificado do servidor. Por exemplo, se o servidor for servername.database.windows.net, seu nome de logon será loginname@servername. Para obter mais informações sobre funções do Banco de dados SQL do Windows Azure, consulte Gerenciando bancos de dados e logons no Banco de dados SQL do Windows Azure.

  4. Substitua <ProvidePassword> pela senha associada ao logon. Observação: recomendamos usar uma senha segura para criar um logon. Para obter mais informações, consulte Senhas seguras.

  5. Substitua <ProvideServerName> pelo nome de domínio totalmente qualificado do seu servidor do Banco de dados SQL. Por exemplo: servername.database.windows.net

  6. Substitua <ProvideDatabaseName> pelo nome do banco de dados que deseja que o código crie.

  7. Execute o código.

noteObservação
Não há instruções Transact-SQL nesse código para remover o novo banco de dados. Exclua o banco de dados antes de executar este aplicativo novamente.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Microsoft.SDS.Samples
{
class Program
{
// Provide the following information
private static string userName = "<ProvideUserName>";
private static string password = "<ProvidePassword>";
private static string dataSource = "<ProvideServerName>";
private static string sampleDatabaseName = "<ProvideDatabaseName>";

static void Main(string[] args)
{
    // Create a connection string for the master database
    SqlConnectionStringBuilder connString1Builder;
    connString1Builder = new SqlConnectionStringBuilder();
    connString1Builder.DataSource = dataSource;
    connString1Builder.InitialCatalog = "master";
    connString1Builder.Encrypt = true;
    connString1Builder.TrustServerCertificate = false;
    connString1Builder.UserID = userName;
    connString1Builder.Password = password;

    // Create a connection string for the sample database
    SqlConnectionStringBuilder connString2Builder;
    connString2Builder = new SqlConnectionStringBuilder();
    connString2Builder.DataSource = dataSource;
    connString2Builder.InitialCatalog = sampleDatabaseName;
    connString2Builder.Encrypt = true;
    connString2Builder.TrustServerCertificate = false;
    connString2Builder.UserID = userName;
    connString2Builder.Password = password;

    // Connect to the master database and create the sample database
    using (SqlConnection conn = new SqlConnection(connString1Builder.ToString()))
    {
        using (SqlCommand command = conn.CreateCommand())
        {

            conn.Open();

            // Create the sample database
            string cmdText = String.Format("CREATE DATABASE {0}",
                                            sampleDatabaseName);
            command.CommandText = cmdText;
            command.ExecuteNonQuery();
            conn.Close();
        }
    }

    // Connect to the sample database and perform various operations
    using (SqlConnection conn = new SqlConnection(connString2Builder.ToString()))
    {
        using (SqlCommand command = conn.CreateCommand())
        {
            conn.Open();

            // Create a table
            command.CommandText = "CREATE TABLE T1(Col1 int primary key, Col2 varchar(20))";
            command.ExecuteNonQuery();

            // Insert sample records
            command.CommandText = "INSERT INTO T1 (col1, col2) values (1, 'string 1'), (2, 'string 2'), (3, 'string 3')";
            int rowsAdded = command.ExecuteNonQuery();

            // Query the table and print the results
            command.CommandText = "SELECT * FROM T1";

            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Loop over the results
                while (reader.Read())
                {
                    Console.WriteLine("Col1: {0}, Col2: {1}", 
                                    reader["Col1"].ToString().Trim(), 
                                    reader["Col2"].ToString().Trim());
                }
            }

            // Update a record
            command.CommandText = "UPDATE T1 SET Col2='string 1111' WHERE Col1=1";
            command.ExecuteNonQuery();

            // Delete a record
            command.CommandText = "DELETE FROM T1 WHERE Col1=2";
            command.ExecuteNonQuery();

            // Query the table and print the results

            Console.WriteLine("\nAfter update/delete the table has these records...");

            command.CommandText = "SELECT * FROM T1";

            using (SqlDataReader reader = command.ExecuteReader())
            {
                // Loop over the results
                while (reader.Read())
                {
                    Console.WriteLine("Col1: {0}, Col2: {1}", 
                                    reader["Col1"].ToString().Trim(), 
                                    reader["Col2"].ToString().Trim());
                }
            }

            conn.Close();
        }
    }
    Console.WriteLine("Press enter to continue...");
    Console.ReadLine();
}
}
}

Consulte também

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft. Todos os direitos reservados.