Udostępnij przez


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

Zobacz też