Die Datenbank Engine von SQL Azure stellt ein Subset der Funktionalitäten des SQL Servers als Cloud Service bereit. Aufgrund der Tatsache, dass hierbei gleiche Schnittstellen und Protokolle zum Einsatz kommen, können bestehende Zugriffstechnologien und Werkzeuge weiterverwendet werden. Entwickler, die bereits mit SQL Server arbeiten, werden sich also schnell zuhause fühlen.

Anlegen und Löschen einer SQL Azure Datenbank

In den folgenden Schritten soll eine neue Datenbank angelegt und zum Zugriff konfiguriert werden. Klicken Sie hierzu im SQL Azure Portal auf die Ribbon-Schaltfläche Create (siehe Abbildung 1).

image

Abbildung 1: Ribbon-Schaltfläche ‘Create’ zum Anlegen einer neuen Datenbank

Daraufhin öffnet sich die in Abbildung 2 gezeigte Eingabemaske, in der die in Tabelle 1 aufgelisteten Angaben zur anzulegenden Datenbank gemacht werden können:

Eingabefeld

Mögliche Eingabewerte

Erläuterung

Database name

String

Name, unter dem die Datenbank später ansprechbar ist.

Edition

Web

Business

Edition, die Auswirkungen auf die Maximalgröße und letztlich damit auch auf die Kosten hat.

Maximum size

Bei Web-Edition:
1 GB, 5 GB

Bei Business-Edition:
10 GB, 20 GB, 30 GB, 40 GB, 50 GB

Maximalgröße, bis zu der Daten in die Datenbank geschrieben warden können. Die Maximalgröße kann zur Laufzeit geändert werden.

Tabelle 1: Parameter für eine neu anzulegende SQL Azure Datenbank

Wählen Sie als Datenbanknamen TestDB und bestätigen Sie Ihre Eingaben mit der Schaltfläche OK.

image

Abbildung 2: Anlegen einer neuen SQL Azure Datenbank

Nach Bestätigung wird die Datenbank angelegt. Noch ist sie allerdings nich zugreifbar, solange nicht die vorgeschaltete SQL Azure Firewall entsprechend geöffnet wird. Die aktuell gültigen Firewall-Einstellungen können im SQL Azure Portal über die Schaltfläche Firewall Rules eingesehen werden. Nach Anklicken öffnet sich eine Liste der geöffneten IP-Adressbereiche, wie in Abbildung 2‑3 zu sehen ist.

image

Abbildung 3: Anzeige der Firewall Einstellungen im SQL Azure Portal

Eine neue Regel zur Freischaltung eines gewünschten IP-Adressbereichs kann über die Schaltfläche Add angelegt werden. Es öffnet sich die in Abbildung 4 gezeigte Eingabemaske.

image

Abbildung 4: Hinzufügen einer Firewall Regel

In dieser Eingabemaske kann der Name der Regel, sowie Start- und Endwert des Adressbereichs eingegeben werden. Durch Bestätigung über die Schaltfläche OK wird die Regel in SQL Azure eingetragen und aktiviert, d.h. Clients, die eine IP-Adresse innerhalb dieses Adressbereichs besitzen, können auf alle Datenbanken des betreffenden SQL Azure Servers zugreifen. Um die Verbindungsmöglichkeit zu SQL Azure zu testen, klicken Sie nun auf die Ribbon-Schaltfläche Test Connectivity (siehe Abbildung 5).

image

Abbildung 5: Ribbon-Schaltfläche ‘Test Connectivity’ zum Testen der Verbindung

Dies führt Sie auf die in Abbildung 6 gezeigte Eingabemaske, in der Sie Benutzernamen und Passwort des SQL Azure Servers eintragen können.

image

Abbildung 6: Testen der Verbindung zu SQL Azure

Eine Bestätigung mit der Schaltfläche Connect testet die Verbindung und zeigt das Ergebnis als Icon an (in Abbildung 6 die Meldung „Success“).

Anlegen von Datenbankobjekten

Zur Arbeit mit Datenbankobjekten kann dank der Schnittstellenkompatibilität zwischen SQL Server und SQL Azure das SQL Server Management Studio eingesetzt werden. Für die folgenden Abschnitte soll dieses verwendet werden, um SQL Anweisungen an SQL Azure zu senden. Rufen Sie das SQL Server Management Studio auf. Es erscheint die in Abbildung 7 gezeigte Eingabemaske, in die Sie die Anmeldeinformationen für den SQL Azure Server eintragen können.

image

Abbildung 7: Anmeldung am SQL Server Management Studio R2

Klicken Sie auf die Schaltfläche Options, um die SQL Azure Datenbank zu bestimmen, zu der Sie die Verbindung herstellen möchten. Es erscheint die in Abbildung 8 gezeigte Eingabemaske. Geben Sie dort den Datenbanknamen TestDB ein und bestätigen Sie Ihre Eingabe mit Connect.

image

Abbildung 8: Eigenschaften der Verbindung zur SQL Azure Datenbank

Damit ist die Verbindung zu SQL Azure hergestellt, und Sie können nun SQL Skripte an die Datenbank schicken.

Anlegen von Datenbankobjekten mittels SQL

Öffnen Sie nun ein neues Abfragefenster durch Auswahl des Menüpunktes File / New / Query with Current Connection. Geben Sie nun das in Listing 1 gezeigte SQL Skript in das Abfragefenster und führen Sie das Skript mittels Auswahl der Schaltfläche Execute aus.

   1: CREATE TABLE [Kunden](
   2:     [KundenID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
   3:     [Anrede] [nvarchar](6) NOT NULL,
   4:     [Vorname] [nvarchar](50) NOT NULL,
   5:     [Nachname] [nvarchar](50) NOT NULL,
   6:     [Email] [nvarchar](50) NOT NULL,
   7:     [Website] [nvarchar](50) NULL,
   8:     [Telefon] [nvarchar](30) NULL,
   9:     [Timestamp] [timestamp] NOT NULL
  10: )
  11:  
  12: CREATE INDEX IX_Kunden_Email ON Kunden (Email)
  13:  
  14: INSERT INTO [Kunden]
  15:     ([Anrede], [Vorname], [Nachname], [Email], [Website], [Telefon])
  16: VALUES
  17:     ('Herr', 'Holger', 'Sirtl', 'hsirtl@microsoft.com',
  18:     'http://blogs.msdn.com/hsirtl', '089/123-456')
  19:  
  20: SELECT * FROM [Kunden]
  21:  

Listing 1: Anlegen einer Datenbanktabelle mittels SQL

In der SQL Azure Datenbank wird nun eine Kundentabelle angelegt und ein Eintrag geschrieben. Abschließend werden noch alle Datenbankeinträge aufgelistet. Das Ergebnis ist in Abbildung 9 zu sehen.

image

Abbildung 9: Ausführung eines SQL Skripts über das SQL Server Management Studio

Zugriff auf Datenbankobjekte

Auf die über das SQL Server Management Studio erzeugte Tabelle soll nun über verschiedene Wege zugegriffen werden.

1.3.1 Zugriff per ADO.NET

Die erste Alternative ist der Weg über ADO.NET. In einer kleinen Konsolenanwendung sollen Einträge in die Tabelle geschrieben, der gesamte Tabelleninhalt gelesen und angezeigt und der Tabelleneintrag wieder gelöscht werden. Listing 2‑2 zeigt den hierzu erforderlichen Programmcode.

Öffnen Sie nun Visual Studio 2010 und legen eine neue Konsolenanwendung über den Menüpunkt File / New / Project an. Wählen Sie als Projektvorlage Windows / Console Application aus. Geben Sie nun den in Listing 2 gezeigten Programmcode ein.

   1: using System;
   2: using System.Data.SqlClient;
   3:  
   4: namespace SqlAzure14
   5: {
   6:     class Program
   7:     {
   8:         static void Main(string[] args)
   9:         {
  10:             string sqlAzureServer        = "<MEIN_SERVER>";
  11:             string sqlAzureDatabase      = "<MEINE_DATENBANK>";
  12:             string sqlAzureAdminUser     = "<MEIN_SERVER_ADMIN_USER>";
  13:             string sqlAzureAdminPassword = "<MEIN_SERVER_ADMIN_PASSWORT>";
  14:  
  15:             string testDbConnString = String.Format(
  16:                 @"Server=tcp:{0}.database.windows.net;Database={1};
  17:                   User ID={2}@{0};Password={3};Trusted_Connection=False;Encrypt=True;", @
  18:                 sqlAzureServer,
  19:                 sqlAzureDatabase,
  20:                 sqlAzureAdminUser,
  21:                 sqlAzureAdminPassword
  22:                 );
  23:  
  24:             // Stelle Verbindung zur Datenbank her...
  25:             using (SqlConnection conn = new SqlConnection(testDbConnString))
  26:             {
  27:                 using (SqlCommand command = conn.CreateCommand())
  28:                 {
  29:                     conn.Open();
  30:  
  31:                     Console.Write("Anrede: ");
  32:                     string anrede = Console.ReadLine();
  33:                     Console.Write("Vorname: ");
  34:                     string vorname = Console.ReadLine();
  35:                     Console.Write("Nachname: ");
  36:                     string nachname = Console.ReadLine();
  37:                     Console.Write("E-Mail: ");
  38:                     string email = Console.ReadLine();
  39:  
  40:                     // Füge einen Eintrag in die Datenbank ein
  41:                     command.CommandText = string.Format(
  42:                         "INSERT INTO [Kunden] (Anrede, Vorname, Nachname, Email)
  43:                          values ('{0}','{1}','{2}','{3}')",                     @
  44:                         anrede, vorname, nachname, email);
  45:                     int rowsAdded = command.ExecuteNonQuery();
  46:  
  47:                     Console.WriteLine("{0} Zeilen erfolgreich hinzugefügt.", rowsAdded);
  48:  
  49:                     // Lies alle Einträge aus der Kundentabelle aus 
  50:                     command.CommandText = "SELECT * FROM [Kunden]";
  51:  
  52:                     using (SqlDataReader reader = command.ExecuteReader())
  53:                     {
  54:                         // Iteriere durch die Ergebnisliste 
  55:                         while (reader.Read())
  56:                         {
  57:                             Console.WriteLine("Vorname: {0}, Nachname: {1}, E-mail: {2}",
  58:                                 reader["Vorname"].ToString().Trim(),
  59:                                 reader["Nachname"].ToString().Trim(),
  60:                                 reader["Email"].ToString().Trim());
  61:                         }
  62:                     }
  63:  
  64:                     // Lösche einen Eintrag 
  65:                     command.CommandText = String.Format(
  66:                         "DELETE FROM [Kunden] WHERE Email='{0}'",
  67:                         email);
  68:                     command.ExecuteNonQuery();
  69:  
  70:                     Console.WriteLine("Inhalt nach Löschen des letzten Eintrags.");
  71:  
  72:                     // Lies alle Einträge aus der Kundentabelle aus 
  73:                     command.CommandText = "SELECT * FROM [Kunden]";
  74:  
  75:                     using (SqlDataReader reader = command.ExecuteReader())
  76:                     {
  77:                         // Iteriere durch die Ergebnisliste
  78:                         while (reader.Read())
  79:                         {
  80:                             Console.WriteLine("Vorname: {0}, Nachname: {1}",
  81:                                 reader["Vorname"].ToString().Trim(),
  82:                                 reader["Nachname"].ToString().Trim());
  83:                         }
  84:                     }
  85:  
  86:                 }
  87:             }
  88:             Console.WriteLine("Press enter to continue...");
  89:             Console.ReadLine();
  90:         }
  91:     }
  92: }

Listing 2: Konsolenanwendung zum Zugriff auf SQL Azure via ADO.NET

Folgende Werte müssen Sie im Programm durch entsprechende Werte Ihrer SQL Azure Umgebung ersetzen:

Attribut

Erläuterung

<MEIN_SERVER>

Name des SQL Azure Servers (hat die Form ‘a1bcd2efgh’)

<MEINE_DATENBANK>

Name der Datenbank, die im Server angelegt wurde

<MEIN_SERVER_ADMIN_USER>

Name des Server-Administrators (muss beim Anlegen eines SQL Azure Servers angegeben werden)

<MEIN_SERVER_ADMIN_PASSWORT>

Passwort des Server-Administrators

Tabelle 2: Attribute einer SQL Azure Connection

Führen Sie nun die Anwendung mittels Debug / Start Debugging aus. Das Ergebnis ist in Abbildung 10 zu sehen.

image

Abbildung 10: Zugriff auf SQL Azure mittels ADO.NET

Weitere Informationen

Veranstaltungshinweis: Live Webcasts

Im Rahmen dieser neuen MSDN Live Webcast Serie bekommen Sie einen Testzugang zur Windows Azure-Plattform und können einzelne Anwendungen in Ihre eigene Windows Azure Test-Instanz bringen. Mein Kollege Tim Fischer und ich stellen dafür Cloud-Anwendungen bereit, diskutieren deren Architektur und stehen Ihnen natürlich auch für Fragen zur Verfügung. Der kommende Termin am 19.05.2011 geht hier auch explizit auf die Möglichkeiten zur Datenspeicherung auf Azure (also auch SQL Azure) ein.

Weitere Termine

  • 19.05.2011 16:00 Uhr - Cloud-Datenbanken und Storage in eigenen Anwendungen nutzen
  • 26.05.2011 16:00 Uhr - .NET, PHP und Java Web-Anwendungen in die Cloud bringen
  • 09.06.2011 15:30 Uhr - Mobile-Web Apps auf Windows Azure betreiben
  • 28.06.2011 15:30 Uhr - In-house und Cloud-Systeme integrieren

Melden Sie sich jetzt an