Die SQL Azure Database Engine–ein Überblick
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).
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.
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.
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.
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).
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.
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.
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.
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: 'https://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.
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.
Abbildung 10: Zugriff auf SQL Azure mittels ADO.NET
Weitere Informationen
SQL Azure im Überblick
SQL Azure in der MSDN Library
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