Udostępnij za pośrednictwem


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, które odpowiadają liście podanej podczas próby utworzenia nowego połączenia przez użytkownika. Rozwija listę rozwijaną zawierającą wszystkie dostępne serwery w oknie dialogowym Właściwości połączenia. Wyświetlane wyniki nie zawsze są kompletne.

Uwaga / Notatka

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 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.
InstanceName Nazwa wystąpienia serwera. Pole pozostaje puste, w przypadku gdy serwer jest uruchomiony jako wystąpienie domyślne.
IsClustered Wskazuje, czy serwer jest częścią klastra.
wersja Wersja serwera. 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świetlone lub nie. 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 może się różnić przy 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 / Notatka

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 dla SqlDataSourceEnumerator za pomocą 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 dezaktywować, co sprawia, że instancja serwera jest niewidoczna 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 także