(0) exportieren Drucken
Alle erweitern

Vorgehensweise: Herstellen einer Verbindung mit der Azure SQL-Datenbank mithilfe von ADO.NET

Letzte Aktualisierung: Dezember 2013

Die Vorgehensweise zum Herstellen einer Verbindung mit einer Datenbank in Microsoft Microsoft Azure SQL-Datenbank mithilfe von ADO.NET ist vergleichbar mit der Vorgehensweise zum Herstellen einer Verbindung mit einer lokalen Instanz von SQL Server. Dieses Thema enthält einige Überlegungen im Zusammenhang mit dem Herstellen einer Verbindung mit Microsoft Azure SQL-Datenbank sowie ein Beispiel für eine Konsolenanwendung, mit der Sie erste Schritte ausführen können. Allgemeinere Informationen zum Herstellen einer Verbindung mit einer Datenquelle mit ADO.NET finden Sie unter Herstellen einer Verbindung mit einer Datenquelle (ADO.NET).

Überlegungen

Beim Herstellen einer Verbindung mit einer Datenbank in Azure SQL-Datenbank mithilfe einer ADO.NET-Anwendung sind folgende Punkte zu berücksichtigen:

Bekanntes Problem beim Herstellen einer Verbindung mit einer SQL-Datenbank mithilfe von ADO.NET in .NET 4.0 und früheren Versionen

Die folgende Fehlermeldung wird in SqlClient-Versionen vor .NET 4.5 verwendet:

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)

Diese Meldung weist auf einen Fehler während des Anmeldevorgangs hin und stellt keinen Verschlüsselungsfehler dar. Ab .NET 4.5 wird von ADO.NET eine besser verständliche Fehlermeldung angezeigt:

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

Beispiel für eine Konsolenanwendung

Das folgende Beispiel ist eine Konsolenanwendung, über die eine Verbindung mit Microsoft Azure SQL-Datenbank hergestellt wird. Von der Konsolenanwendung werden die folgenden Schritte ausgeführt:

  1. Die Konsolenanwendung verwendet ein SqlConnectionStringBuilder-Objekt, um eine Verbindung mit der master-Datenbank in Microsoft Azure SQL-Datenbank herzustellen. Anschließend wird von der Anwendung eine Datenbank erstellt, deren Name aus der sampleDatabaseName-Zeichenfolge stammt.

  2. Danach wird mithilfe eines zweiten SqlConnectionStringBuilder-Objekts eine Verbindung mit der neuen Datenbank hergestellt.

  3. Nachdem die Verbindung hergestellt wurde, wird mithilfe des zweiten SqlConnectionStringBuilder-Objekts eine Datenbanktabelle erstellt, und es werden einige DML-Anweisungen (Data Manipulation Language, Datenbearbeitungssprache) ausgeführt.

  4. Außerdem werden vor und nach den Datenänderungen Daten an die Konsole zurückgegeben.

Verwenden dieses Beispiels

Führen Sie die folgenden Schritte aus, um dieses Beispiel in Visual Studio mit dem Azure SQL-Datenbank-Server zu verwenden:

  1. Öffnen Sie Visual Studio, und erstellen Sie eine Konsolenanwendung.

  2. Ersetzen Sie den Code in der Programmdatei durch den Code aus diesem Beispiel.

  3. Ersetzen Sie <ProvideUserName> durch den Namen einer Microsoft Azure SQL-Datenbank-Anmeldung mit der dbmanager-Rolle. Hinweis: Wenn Sie das Format login@server für den Benutzernamen verwenden, muss der server-Teil des Namens mit dem ersten Teil des vollqualifizierten Servernamens übereinstimmen. Lautet der Server beispielsweise servername.database.windows.net, ist der Anmeldename loginname@servername. Weitere Informationen zu Microsoft Azure SQL-Datenbank-Rollen finden Sie unter Verwalten von Datenbanken und Anmeldungen in der Azure SQL-Datenbank.

  4. Ersetzen Sie <ProvidePassword> durch das Kennwort der Anmeldung. Hinweis: Beim Erstellen einer Anmeldung empfiehlt sich die Verwendung eines sicheren Kennworts. Weitere Informationen finden Sie unter Sichere Kennwörter.

  5. Ersetzen Sie <ProvideServerName> durch den vollqualifizierten Domänennamen des Azure SQL-Datenbank-Servers. Beispiel: servername.database.windows.net

  6. Ersetzen Sie <ProvideDatabaseName> durch den Namen der Datenbank, die mithilfe des Codes erstellt werden soll.

  7. Führen Sie den Code aus.

noteHinweis
Dieser Code enthält keine Transact-SQL-Anweisungen, um die neue Datenbank zu entfernen. Löschen Sie die Datenbank, bevor Sie diese Anwendung erneut ausführen.


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

Siehe auch

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft