Udostępnij przez


Wyliczanie wystąpień programu SQL Server (ADO.NET)

Pobieranie 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. Gdy użytkownik próbuje utworzyć nowe połączenie, zwracana tabela zawiera listę wystąpień serwera dostępnych w sieci, które odpowiadają liście podanej przez użytkownika. Rozwija także 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. Aby uzyskać więcej informacji na temat usługi SQL Browser i sposobu zarządzania jej zachowaniem, zobacz Artykuł SQL Server Books Online (Książki programu SQL Server Online).

Pobieranie wystąpienia enumeratora

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 :

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.

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 Description
Nazwa serwera Nazwa serwera.
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. 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ć lub nie być 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 / 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).

SQL Server udostępnia informacje dotyczące SqlDataSourceEnumerator za pośrednictwem 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 zablokować, co sprawia, że wystąpienie serwera jest niewidoczne dla tej klasy.

Example

Poniższa aplikacja konsolowa pobiera informacje o wszystkich widocznych wystąpieniach programu SQL Server i wyświetla informacje w oknie konsoli.

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

Dalsze kroki