Exporter (0) Imprimer
Développer tout

Procédure : se connecter à la Base de données SQL Azure à l'aide de l'ADO.NET

Mis à jour: décembre 2013

L'utilisation d'ADO.NET pour se connecter à une base de données dans Microsoft Base de données SQL Microsoft Azure est semblable à la connexion à une instance locale de SQL Server. Cette rubrique décrit quelques considérations relatives à la connexion à Base de données SQL Microsoft Azure et fournit un exemple d'application console que vous pouvez utiliser comme point de départ. Pour plus d'informations générales sur la connexion à une source de données avec ADO.NET, consultez Connexion à une source de données (ADO.NET).

Éléments à prendre en considération

Lorsque vous vous connectez à une base de données dans Base de données SQL Azure avec une application ADO.NET, considérez les points suivants :

  • Évitez les attaques par injection en ayant recours à la classe SqlConnectionStringBuilder. Elle est disponible dans le .NET Framework pour simplifier la création de la chaîne de connexion. Pour plus d'informations, consultez Générateurs de chaînes de connexion (ADO.NET).

  • Une chaîne de connexion constitue une vulnérabilité potentielle. Pour plus d'informations sur la protection de la chaîne de connexion, consultez Protection des informations de connexion (ADO.NET).

  • Chiffrez la connexion, en particulier lorsque vous vous connectez à Base de données SQL Azure via Internet, afin qu'aucune attaque de l'intercepteur ( « man in the middle » ) soit possible. Affectez à la propriété de connexion Encrypt la valeur True (Encrypt = True). Affectez à la propriété de connexion TrustServerCertificate la valeur False (TrustServerCertificate = False).

  • Pour connaître les considérations générales relatives à la connexion aux bases de données dans Base de données SQL Azure, consultez Instructions pour la connexion à Base de données SQL Windows Azure et Article technique – Résilience de connexion inactive.

  • Lorsque vous ouvrez une connexion à un Base de données SQL Azure, définissez le délai de connexion à 30 secondes.

Problèmes connus lors de la connexion à une Base de données SQL à l'aide d'ADO.NET dans .NET 4.0 et versions antérieures

Le message d'erreur suivant est utilisé dans les versions SqlClient antérieures à .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)

Cette erreur signale un échec pendant le processus d'ouverture de session et elle n'est pas une erreur de chiffrement. Depuis .NET 4.5, ADO.NET affiche un meilleur message d'erreur :

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

Exemple d'application console

L'exemple suivant est une application console qui se connecte à Base de données SQL Microsoft Azure. L'application console effectue les étapes suivantes :

  1. L'application console utilise un objet SqlConnectionStringBuilder pour se connecter à la base de données master dans Base de données SQL Microsoft Azure. L'application crée ensuite une base de données dont le nom est fournie par la chaîne sampleDatabaseName.

  2. Ensuite, l'application console utilise un deuxième objet SqlConnectionStringBuilder pour se connecter à la nouvelle base de données.

  3. Une fois connectée, elle utilise le deuxième objet SqlConnectionStringBuilder pour créer une table de base de données et exécuter plusieurs instructions DML (Data Manipulation Language).

  4. Pour finir, elle renvoie des données à la console avant et après que des données ont changé.

Utilisation de cet exemple

Pour utiliser cet exemple dans Visual Studio avec votre serveur Base de données SQL Azure, procédez comme suit :

  1. Ouvrez Visual Studio et créez une application console.

  2. Remplacez le code dans le fichier de programme par le code de cet exemple.

  3. Remplacez <ProvideUserName> par le nom d'une connexion Base de données SQL Microsoft Azure à laquelle a été affecté le rôle dbmanager. Remarque : si vous utilisez le format de nom d'utilisateur login@server, la partie server du nom doit correspondre à la première partie du nom complet du serveur. Par exemple, si votre serveur est servername.database.windows.net, votre nom de connexion est loginname@servername. Pour plus d'informations sur les rôles de Base de données SQL Microsoft Azure, consultez Gestion des bases de données et des connexions dans Base de données SQL Azure.

  4. Remplacez <ProvidePassword> par le mot de passe associé à la connexion. Remarque : nous vous recommandons d'utiliser un mot de passe fort lors de la création d'une connexion. Pour plus d'informations, consultez Mots de passe forts.

  5. Remplacez <ProvideServerName> par le nom de domaine complet de votre serveur Base de données SQL Azure. Par exemple : servername.database.windows.net

  6. Remplacez <ProvideDatabaseName> par le nom de la base de données que vous souhaitez que le code crée.

  7. Exécutez le code.

noteRemarque
Il n'y a pas d'instructions Transact-SQL dans ce code pour supprimer la nouvelle base de données. Supprimez la base de données avant de réexécuter cette application.


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

Voir aussi

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft