Tech-ed Brasil 2009: exemplos para o SQL Azure Database

Olá pessoal, tudo certo?

Durante o Tech-ed Brasil 2009, apresentei uma sessão sobre o SQL Azure Database, falando sobre as novidades do último CTP de agosto deste serviço.

Entre as novidades, temos agora o suporte a T-SQL, compatível com: Tables, indexes e views, Stored Procedures, Triggers
Constraints, Constantes, Table variables, session temp tables (#t),
etc.

Outros recursos estão previstos para as próximas atualizações do serviço, como Distributed Transactions, Distributed Query, CLR, Service Broker, Spatial, System tables, Trace Flags, entre outros. Vale acompanhar o blog do time de produto, aqui.

A página principal de administração de suas bases no portal do Azure é essa abaixo:

image

Ref.: https://sql.azure.com/

Podemos criar novas bases a partir do portal, via SQLCMD.EXE (em linha de comando), via SQL Server Management Studio 2008 (ainda parcialmente suportado) ou mesmo programaticamente.

Durante a palestra, apresentei um exemplo de código para a criação de uma base e algumas operações. Atendendo a pedidos, segue o código abaixo:

    1: using System;
    2: using System.Collections.Generic;
    3: using System.Linq;
    4: using System.Text;
    5: using System.Data.SqlClient;
    6: using System.Data;
    7:  
    8: namespace Microsoft.SDS.Samples
    9: {
   10:     class Program
   11:     {
   12:         private static string userName = "MyUserAccount";
   13:         private static string password = "MyPassWord";
   14:         private static string dataSource = "tcp:MyServer.ctp.database.windows.net";
   15:         private static string sampleDatabaseName = "MyDatabaseName";
   16:  
   17:         static void Main(string[] args)
   18:         {
   19:             // Criando uma connection string para o master database.
   20:             SqlConnectionStringBuilder connString1Builder;
   21:             connString1Builder = new SqlConnectionStringBuilder();
   22:             connString1Builder.DataSource = dataSource;
   23:             connString1Builder.InitialCatalog = "master";
   24:             connString1Builder.Encrypt = true;
   25:             connString1Builder.TrustServerCertificate = true;
   26:             connString1Builder.UserID = userName;
   27:             connString1Builder.Password = password;
   28:  
   29:             // Criando uma connection string para o meu database.
   30:             SqlConnectionStringBuilder connString2Builder;
   31:             connString2Builder = new SqlConnectionStringBuilder();
   32:             connString2Builder.DataSource = dataSource;
   33:             connString2Builder.InitialCatalog = sampleDatabaseName;
   34:             connString2Builder.Encrypt = true;
   35:             connString2Builder.TrustServerCertificate = true;
   36:             connString2Builder.UserID = userName;
   37:             connString2Builder.Password = password;
   38:  
   39:             // Conectando ao master database e criando meu database.
   40:             using (SqlConnection conn = new SqlConnection(connString1Builder.ToString()))
   41:             {
   42:                 using (SqlCommand command = conn.CreateCommand())
   43:                 {
   44:                     conn.Open();
   45:                     string cmdText = String.Format("CREATE DATABASE {0}",
   46:                                                     sampleDatabaseName);
   47:                     command.CommandText = cmdText;
   48:                     command.ExecuteNonQuery();
   49:                     conn.Close();
   50:                 }
   51:             }
   52:  
   53:             // Conectando ao meu banco recém criado e realizando várias operações.
   54:             using (SqlConnection conn = new SqlConnection(connString2Builder.ToString()))
   55:             {
   56:                 using (SqlCommand command = conn.CreateCommand())
   57:                 {
   58:                     conn.Open();
   59:  
   60:                     // Criando uma tabela.
   61:                     command.CommandText = "CREATE TABLE T1(Col1 int primary key, Col2 varchar(20))";
   62:                     command.ExecuteNonQuery();
   63:  
   64:                     // Inserindo alguns registros.
   65:                     command.CommandText = "INSERT INTO T1 (col1, col2) values (1, 'string 1'), (2, 'string 2'), (3, 'string 3')";
   66:                     int rowsAdded = command.ExecuteNonQuery();
   67:  
   68:                     // Consultando a tabela e imprimindo resultados.
   69:                     command.CommandText = "SELECT * FROM T1";
   70:  
   71:                     using (SqlDataReader reader = command.ExecuteReader())
   72:                     {
   73:                         // Loop sobre os resultados.
   74:                         while (reader.Read())
   75:                         {
   76:                             Console.WriteLine("Col1: {0}, Col2: {1}",
   77:                                             reader["Col1"].ToString().Trim(),
   78:                                             reader["Col2"].ToString().Trim());
   79:                         }
   80:                     }
   81:  
   82:                     // Atualizando um registro.
   83:                     command.CommandText = "UPDATE T1 SET Col2='string 1111' WHERE Col1=1";
   84:                     command.ExecuteNonQuery();
   85:  
   86:                     // Removendo um registro.
   87:                     command.CommandText = "DELETE FROM T1 WHERE Col1=2";
   88:                     command.ExecuteNonQuery();
   89:  
   90:                     // Consultando registros.
   91:                     Console.WriteLine("\nDepois do update/delete, a tabela tem os seguintes registros...");
   92:  
   93:                     command.CommandText = "SELECT * FROM T1";
   94:  
   95:                     using (SqlDataReader reader = command.ExecuteReader())
   96:                     {
   97:                         // Loop sobre resultados.
   98:                         while (reader.Read())
   99:                         {
  100:                             Console.WriteLine("Col1: {0}, Col2: {1}",
  101:                                             reader["Col1"].ToString().Trim(),
  102:                                             reader["Col2"].ToString().Trim());
  103:                         }
  104:                     }
  105:                 }
  106:             }
  107:             Console.WriteLine("Pressione [ENTER] para continuar...");
  108:             Console.ReadLine();
  109:         }
  110:     }
  111: }

Para quem gosta do SQLCMD.EXE, o script de conexão que usei com o SQL Azure Database (SAD) foi o seguite:

sqlcmd.exe -S “MyServer.ctp.database.windows.net” -U “MyUser@MyServer” -P “MyPassword” -d “master“

Com a linha de comando acima, conectamos ao SAD na base master. Com a conexão realizada, podemos executar os mesmos comandos T-SQL que conhecemos, suportados na v1 (CTP de agosto).

E para quem pretendo testar o serviço via SQL Server Management Studio 2008, vale a dica: cancelar a primeira janela de conexão e sempre criar uma nova consulta (New Query) para toda conexão com o banco.

image

E pode ignorar o erro ANSI_NULLS, que vai aparecer de tempos em tempos após cada conexão. Ainda estamos em CTP, lembre-se! :)

image

Para quem ainda não viu, o Windows Azure Platform Training Kit (August 2009 Update) está bem legal, oferecendo uma introdução sobre o SAD e seus recursos. Leitura obrigatória! :)

Windows Azure Platform Training Kit
Ref.: https://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&displaylang=en

Estou trabalhando ainda num artigo maior, descrevendo os principais aspectos do novo CTP do SQL Azure Database. Aguardem! :)

Por enquanto é só! Até o próximo post :)

Waldemir.