Räkna upp instanser av SQL Server (ADO.NET)
SQL Server tillåter program att hitta SQL Server-instanser i det aktuella nätverket. Klassen SqlDataSourceEnumerator exponerar den här informationen för programutvecklaren och tillhandahåller en DataTable innehållande information om alla synliga servrar. Den här returnerade tabellen innehåller en lista över tillgängliga serverinstanser i nätverket som matchar listan som angavs när en användare försöker skapa en ny anslutning och expanderar listrutan som innehåller alla tillgängliga servrar i dialogrutan Anslut ionsegenskaper. De resultat som visas är inte alltid fullständiga.
Kommentar
Precis som med de flesta Windows-tjänster är det bäst att köra SQL Browser-tjänsten med minsta möjliga behörighet.
Hämtar en uppräkningsinstans
För att kunna hämta tabellen som innehåller information om tillgängliga SQL Server-instanser måste du först hämta en uppräknare med hjälp av den delade/statiska Instance egenskapen:
Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _
System.Data.Sql.SqlDataSourceEnumerator.Instance
System.Data.Sql.SqlDataSourceEnumerator instance =
System.Data.Sql.SqlDataSourceEnumerator.Instance
När du har hämtat den statiska instansen GetDataSources kan du anropa metoden som returnerar en DataTable innehållande information om de tillgängliga servrarna:
Dim dataTable As System.Data.DataTable = instance.GetDataSources()
System.Data.DataTable dataTable = instance.GetDataSources();
Tabellen som returneras från metodanropet innehåller följande kolumner, som alla innehåller string
värden:
Kolumn | beskrivning |
---|---|
Servernamn | Namnet på servern. |
Instansnamn | Namnet på serverinstansen. Tomt om servern körs som standardinstans. |
IsClustered | Anger om servern är en del av ett kluster. |
Version: | Serverns version. Till exempel: – 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) |
Uppräkningsbegränsningar
Alla tillgängliga servrar kanske inte visas. Listan kan variera beroende på faktorer som tidsgränser och nätverkstrafik. Detta kan göra att listan skiljer sig åt vid två efterföljande anrop. Endast servrar i samma nätverk visas. Sändningspaket går vanligtvis inte igenom routrar, vilket är anledningen till att du kanske inte ser en server i listan, men det blir stabilt mellan anrop.
Servrar som visas kanske eller kanske inte har ytterligare information, till exempel IsClustered
och version. Detta beror på hur listan hämtades. Servrar som listas via SQL Server-webbläsartjänsten har mer information än de som hittas via Windows-infrastrukturen, som endast visar namnet.
Kommentar
Serveruppräkning är endast tillgängligt när den körs med fullständigt förtroende. Sammansättningar som körs i en delvis betrodd miljö kan inte använda den, även om de har behörigheten SqlClientPermission Code Access Security (CAS).
SQL Server innehåller information om SqlDataSourceEnumerator hur du använder en extern Windows-tjänst med namnet SQL Browser. Den här tjänsten är aktiverad som standard, men administratörer kan inaktivera den eller inaktivera den, vilket gör serverinstansen osynlig för den här klassen.
Exempel
Följande konsolprogram hämtar information om alla synliga SQL Server-instanser och visar informationen i konsolfönstret.
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("============================");
}
}
}