Énumération d'instances de SQL Server (ADO.NET)

Mise à jour : November 2007

SQL Server 2000 et SQL Server 2005 permettent à des applications de trouver des instances de SQL Server dans le réseau actuel. La classe SqlDataSourceEnumerator expose ces informations au développeur d'applications, en fournissant un DataTable contenant des informations sur tous les serveurs visibles. Cette table retournée contient une liste des instances de serveur disponibles sur le réseau, qui correspond à celle fournie quand un utilisateur tente de créer une nouvelle connexion et développe la liste déroulante contenant tous les serveurs disponibles dans la boîte de dialogue Propriétés des connexions. Les résultats affichés ne sont pas toujours complets.

Remarque :

Comme avec la plupart des services Windows, il est préférable d'exécuter le service SQL Browser avec le moins possible de privilèges. Pour plus d'informations sur le service SQL Browser et sur la manière de gérer son comportement, voir la documentation en ligne de SQL Server.

Extraction d'une instance d'énumérateur

Pour extraire la table contenant des informations sur les instances de SQL Server disponibles, vous devez commencer par extraire un énumérateur en utilisant la propriété partagée/statique Instance :

Dim instance As System.Data.Sql.SqlDatSourceEnumerator = _
   System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance = 
   System.Data.Sql.SqlDataSourceEnumerator.Instance

Après avoir extrait l'instance statique, vous pouvez appeler la méthode GetDataSources qui retourne un DataTable contenant des informations sur les serveurs disponibles :

Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();

La table retournée par l'appel de la méthode comprend les colonnes suivantes qui contiennent toutes des valeurs string :

Colonne

Description

ServerName

Nom du serveur.

InstanceName

Nom de l'instance du serveur. Vide si le serveur s'exécute comme instance par défaut.

IsClustered

Indique si le serveur fait partie d'un cluster.

Version

Version du server (8.00.x pour SQL Serve 2000 et 9.00.x pour SQL Server 2005).

Limitations des énumérations

Tous les serveurs disponibles peuvent être répertoriés ou ne pas l'être. La liste peut varier en fonction de facteurs tels que des délais d'attente et le trafic réseau. Cela peut avoir pour effet que la liste diffère sur deux appels consécutifs. Seuls des serveurs sur le même réseau sont répertoriés. Les paquets de diffusion ne traversent généralement pas les routeurs, ce qui explique pourquoi vous pouvez ne pas voir un serveur dans la liste, alors qu'il est stable dans l'ensemble des appels.

Les serveurs répertoriés peuvent avoir ou non des informations supplémentaires, telles qu'un IsClustered et une version. Cela dépend de la manière dont la liste a été obtenue. Les serveurs répertoriés à l'aide du service de navigateur de SQL Server offrent plus de détails que ceux trouvés via l'infrastructure Windows dont seul le nom est indiqué.

Remarque :

L'énumération des serveurs n'est disponible qu'en mode d'exécution avec un niveau de confiance totale. Les assemblys s'exécutant dans un environnement bénéficiant d'un niveau de confiance partielle ne peuvent pas l'utiliser, même s'ils disposent de l'autorisation de sécurité d'accès du code CAS (Code Access Security) SqlClientPermission.

SQL Server 2000 fournit des informations pour le SqlDataSourceEnumerator au niveau interne. En revanche, SQL Server 2005 fournit les informations en utilisant un service Windows externe nommé SQL Browser. Ce service est activé par défaut mais les administrateurs peuvent l'arrêter ou le désactiver, ce qui rend l'instance du serveur invisible pour cette classe. Ce service s'applique uniquement à SQL Server 2005 et est sans effet sur le comportement de SQL Server 2000.

Remarque :

Le matériel et les logiciels peuvent limiter la capacité à parcourir les instances de SQL Server. Pour plus d'informations sur l'ouverture de ports pour la navigation, voir l'article de la Base de connaissances Comment utiliser un script pour ouvrir par programme des ports que SQL Server utilisera sur les systèmes exécutant Windows XP Service Pack 2.

Exemple

L'application console suivante extrait des informations sur toutes les instances de SQL Server visibles et affiche les informations dans la fenêtre de console.

Imports System.Data.Sql

Module Module1
  Sub Main()
    ' Retrieve the enumerator instance and then the data.
    Dim instance As SqlDataSourceEnumerator = _
     SqlDataSourceEnumerator.Instance
    Dim table As System.Data.DataTable = instance.GetDataSources()

    ' Display the contents of the table.
    DisplayData(table)

    Console.WriteLine("Press any key to continue.")
    Console.ReadKey()
  End Sub

  Private Sub DisplayData(ByVal table As DataTable)
    For Each row As DataRow In table.Rows
      For Each col As DataColumn In table.Columns
        Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
      Next
      Console.WriteLine("============================")
    Next
  End Sub
End Module
using System.Data.Sql;

class Program
{
  static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

  private static void DisplayData(System.Data.DataTable table)
  {
    foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }
      Console.WriteLine("============================");
    }
  }
}

Voir aussi

Autres ressources

SQL Server et ADO.NET