Aufzählen von SQL Server-Instanzen (ADO.NET)

Aktualisiert: November 2007

In SQL Server 2000 und SQL Server 2005 können Anwendungen die im aktuellen Netzwerk vorhandenen SQL Server-Instanzen ermitteln. Die hierzu erforderlichen Informationen werden den Entwicklern von Anwendungen durch die SqlDataSourceEnumerator-Klasse als DataTable verfügbar gemacht, die Informationen zu allen sichtbaren Servern enthält. Diese zurückgegebene Tabelle enthält eine Liste der im Netzwerk verfügbaren Serverinstanzen. Diese Liste entspricht der Liste, die bereitgestellt wird, wenn ein Benutzer beim Erstellen einer neuen Verbindung im Dialogfeld Verbindungseigenschaften die Dropdownliste mit allen verfügbaren Servern erweitert. Die Liste der angezeigten Ergebnisse ist nicht immer vollständig.

Hinweis:

Wie bei den meisten Windows-Diensten wird auch hier empfohlen, den SQL-Browserdienst mit minimalen Berechtigungen auszuführen. Weitere Informationen zum SQL-Browserdienst und dessen Verwaltung finden Sie in der Onlinedokumentation zu SQL Server.

Abrufen einer Enumeratorinstanz

Damit Sie die Tabelle mit den Informationen zu den verfügbaren SQL Server-Instanzen abrufen können, müssen Sie zunächst einen Enumerator abrufen. Hierzu verwenden Sie die freigegebene/statische Instance-Eigenschaft:

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

Nachdem Sie die statische Instanz abgerufen haben, können Sie die GetDataSources-Methode aufrufen. Diese gibt eine DataTable mit den Informationen zu den verfügbaren Servern zurück:

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

Die von der aufgerufenen Methode zurückgegebene Tabelle enthält die folgenden Spalten, die wiederum jeweils alle string-Werte enthalten:

Spalte

Beschreibung

ServerName

Name des Servers.

InstanceName

Name der Serverinstanz. Die Spalte bleibt leer, wenn der Server als Standardinstanz ausgeführt wird.

IsClustered

Gibt an, ob der Server Teil eines Clusters ist.

Version

Version des Servers (8.00.x für SQL Server 2000 und 9.00.x für SQL Server 2005).

Einschränkungen bei der Enumeration

Möglicherweise werden nicht immer alle verfügbaren Server aufgelistet. Der Umfang der Liste kann je nach Faktoren wie Timeouts und Datenverkehr im Netzwerk variieren. Daher kann die Liste bei zwei aufeinander folgenden Aufrufen unterschiedlich ausfallen. Es werden nur Server aufgelistet, die sich im gleichen Netzwerk befinden. Da Broadcastpakete i. d. R. von Routern nicht weitergeleitet werden, wird möglicherweise ein verfügbarer Server nicht aufgelistet. Dieses Verhalten ist bei jedem Aufruf gleich.

Zu den aufgelisteten Servern werden ggf. zusätzliche Informationen aufgeführt, z. B. IsClustered oder die Version. Dies ist davon abhängig, wie die Liste abgerufen wurde. Es werden ausführlichere Informationen angezeigt, wenn die Server über den SQL Server-Browserdienst aufgelistet werden. Bei Servern, die über die Windows-Infrastruktur ermittelt werden, wird nur der Name aufgeführt.

Hinweis:

Serverenumeration ist nur in vollständig vertrauenswürdigen Umgebungen verfügbar. Assemblys, die in einer nur teilweise vertrauenswürdigen Umgebung ausgeführt werden, können die Enumeration nicht verwenden. Dies gilt auch, wenn sie über die SqlClientPermission-Codezugriffssicherheitsberechtigung (CAS) verfügen.

Bei SQL Server 2000 werden die Informationen für den SqlDataSourceEnumerator intern bereitgestellt. Bei SQL Server 2005 dagegen werden die Informationen über den externen Windows-Dienst SQL-Browser bereitgestellt. Dieser Dienst ist in der Standardeinstellung aktiviert, kann vom Administrator jedoch deaktiviert werden. Dadurch wird die Serverinstanz für diese Klasse unsichtbar. Dieser Dienst wird nur unter SQL Server 2005 angewendet und hat keine Auswirkungen auf das Verhalten von SQL Server 2000.

Hinweis:

Die Suchfunktion für Instanzen von SQL Server kann durch Hardware oder Software eingeschränkt sein. Weitere Informationen zum Öffnen von Ports zum Suchen finden Sie im Knowledge Base-Artikel Wie Verwenden eines Skripts programmgesteuert zu dem Öffnen von Ports SQL Server Ports auf Systemen, die Windows XP Service Pack 2 ausführen, zu verwenden.

Beispiel

Die folgende Konsolenanwendung ruft Informationen zu allen sichtbaren Instanzen von SQL Server ab und zeigt diese Informationen im Konsolenfenster an.

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

Siehe auch

Weitere Ressourcen

SQL Server und ADO.NET