Wyliczanie wystąpień programu SQL Server (ADO.NET)
Program SQL Server zezwala aplikacjom na znajdowanie wystąpień programu SQL Server w bieżącej sieci. Klasa SqlDataSourceEnumerator uwidacznia te informacje deweloperowi aplikacji, podając DataTable informacje zawierające informacje o wszystkich widocznych serwerach. Ta zwracana tabela zawiera listę wystąpień serwera dostępnych w sieci zgodnej z listą podaną podczas próby utworzenia nowego połączenia przez użytkownika i rozwija listę rozwijaną zawierającą wszystkie dostępne serwery w oknie dialogowym Właściwości Połączenie ion. Wyświetlane wyniki nie zawsze są kompletne.
Uwaga
Podobnie jak w przypadku większości usług systemu Windows, najlepiej uruchomić usługę SQL Browser z najmniejszymi możliwymi uprawnieniami.
Pobieranie wystąpienia modułu wyliczającego
Aby pobrać tabelę zawierającą informacje o dostępnych wystąpieniach programu SQL Server, należy najpierw pobrać moduł wyliczający przy użyciu właściwości udostępnionej/statycznej Instance :
Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _
System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance =
System.Data.Sql.SqlDataSourceEnumerator.Instance
Po pobraniu wystąpienia statycznego można wywołać metodę GetDataSources , która zwraca DataTable informacje zawierające informacje o dostępnych serwerach:
Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();
Tabela zwrócona z wywołania metody zawiera następujące kolumny, z których wszystkie zawierają string
wartości:
Kolumna | opis |
---|---|
Nazwa_serwera | Nazwa serwera programu . |
Instancename | Nazwa wystąpienia serwera. Puste, jeśli serwer jest uruchomiony jako wystąpienie domyślne. |
Isclustered | Wskazuje, czy serwer jest częścią klastra. |
Wersja | Wersja serwera. Na przykład: - 9.00.x (SQL Server 2005) - 10.0.xx (SQL Server 2008) - 10.50.x (SQL Server 2008 R2) - 11.0.xx (SQL Server 2012) |
Ograniczenia wyliczenia
Wszystkie dostępne serwery mogą być wyświetlane lub nie są wyświetlane. Lista może się różnić w zależności od czynników, takich jak przekroczenia limitu czasu i ruch sieciowy. Może to spowodować, że lista będzie inna w dwóch kolejnych wywołaniach. Zostaną wyświetlone tylko serwery w tej samej sieci. Pakiety rozgłaszane zazwyczaj nie przechodzą przez routery, dlatego serwer może nie być widoczny na liście, ale będzie stabilny w różnych wywołaniach.
Wymienione serwery mogą lub nie mają dodatkowych informacji, takich jak IsClustered
i wersja. Zależy to od sposobu uzyskania listy. Serwery wymienione za pośrednictwem usługi przeglądarki programu SQL Server będą miały więcej szczegółów niż te znalezione za pośrednictwem infrastruktury systemu Windows, która będzie zawierać tylko nazwę.
Uwaga
Wyliczenie serwera jest dostępne tylko w przypadku uruchamiania w trybie pełnego zaufania. Zestawy uruchomione w częściowo zaufanym środowisku nie będą mogły z niego korzystać, nawet jeśli mają SqlClientPermission uprawnienia zabezpieczenia dostępu do kodu (CAS).
Program SQL Server udostępnia informacje dotyczące SqlDataSourceEnumerator korzystania z zewnętrznej usługi systemu Windows o nazwie SQL Browser. Ta usługa jest domyślnie włączona, ale administratorzy mogą ją wyłączyć lub wyłączyć, co sprawia, że wystąpienie serwera jest niewidoczne dla tej klasy.
Przykład
Poniższa aplikacja konsolowa pobiera informacje o wszystkich widocznych wystąpieniach programu SQL Server i wyświetla informacje w oknie konsoli.
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("============================");
}
}
}