Aufzählen von SQL Server-Instanzen (ADO.NET)
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("============================");
}
}
}