Sdílet prostřednictvím


Vytváření výčtu instancí SQL Serveru (ADO.NET)

SQL Server umožňuje aplikacím najít instance SQL Serveru v aktuální síti. Třída SqlDataSourceEnumerator tyto informace zveřejňuje vývojáři aplikací a poskytuje DataTable informace o všech viditelných serverech. Tato vrácená tabulka obsahuje seznam instancí serveru dostupných v síti, které odpovídají seznamu, který se zobrazí, když se uživatel pokusí vytvořit nové připojení, a rozbalí rozevírací seznam obsahující všechny dostupné servery v dialogovém okně vlastnosti Připojení ionu. Zobrazené výsledky nejsou vždy dokončeny.

Poznámka:

Stejně jako u většiny služeb Windows je nejlepší spustit službu SQL Browser s nejnižšími možnými oprávněními.

Načtení instance enumerátoru

Pokud chcete načíst tabulku obsahující informace o dostupných instancích SQL Serveru, musíte nejprve načíst enumerátor pomocí sdílené/statické Instance vlastnosti:

Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _  
   System.Data.Sql.SqlDataSourceEnumerator.Instance  
System.Data.Sql.SqlDataSourceEnumerator instance =
   System.Data.Sql.SqlDataSourceEnumerator.Instance  

Po načtení statické instance můžete volat metodu GetDataSources , která vrátí DataTable informace o dostupných serverech:

Dim dataTable As System.Data.DataTable = instance.GetDataSources()  
System.Data.DataTable dataTable = instance.GetDataSources();  

Tabulka vrácená voláním metody obsahuje následující sloupce, z nichž všechny obsahují string hodnoty:

Sloupec Popis
Název_serveru Název serveru.
Název_instance Název instance serveru. Prázdné, pokud je server spuštěný jako výchozí instance.
IsClustered Určuje, jestli je server součástí clusteru.
Verze Verze serveru. Příklad:

- 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)

Omezení výčtu

Všechny dostupné servery můžou nebo nemusí být uvedené. Seznam se může lišit v závislosti na faktorech, jako jsou časové limity a síťový provoz. To může způsobit, že se seznam u dvou po sobě jdoucích volání liší. Zobrazí se jenom servery ve stejné síti. Pakety všesměrového vysílání obvykle neprocházejí směrovači, což je důvod, proč se nemusí zobrazit seznam serverů, ale bude stabilní napříč voláními.

Uvedené servery můžou nebo nemusí obsahovat další informace, jako IsClustered jsou a verze. To závisí na tom, jak byl seznam získán. Servery uvedené prostřednictvím služby prohlížeče SQL Serveru budou obsahovat více podrobností než ty, které se nacházejí prostřednictvím infrastruktury Systému Windows, která bude obsahovat pouze název.

Poznámka:

Výčet serveru je k dispozici pouze při spuštění v plné důvěryhodnosti. Sestavení spuštěná v částečně důvěryhodném prostředí ji nebudou moct používat, i když mají SqlClientPermission oprávnění Zabezpečení přístupu kódu (CAS).

SQL Server poskytuje informace pro SqlDataSourceEnumerator použití externí služby systému Windows s názvem SQL Browser. Tato služba je ve výchozím nastavení povolená, ale správci ji mohou vypnout nebo zakázat, aby instance serveru byla pro tuto třídu neviditelná.

Příklad

Následující konzolová aplikace načte informace o všech viditelných instancích SQL Serveru a zobrazí informace v okně konzoly.

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

Viz také