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