Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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("============================");
}
}
}