Dela via


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

Se även