Delen via


Exemplaren van SQL Server (ADO.NET) opsommen

MET SQL Server kunnen toepassingen SQL Server-exemplaren vinden binnen het huidige netwerk. Deze SqlDataSourceEnumerator informatie wordt door de klasse beschikbaar gesteld aan de ontwikkelaar van de toepassing. Deze bevat informatie DataTable over alle zichtbare servers. Deze geretourneerde tabel bevat een lijst met serverexemplaren die beschikbaar zijn in het netwerk die overeenkomen met de lijst die wordt opgegeven wanneer een gebruiker probeert een nieuwe verbinding te maken en de vervolgkeuzelijst met alle beschikbare servers in het dialoogvenster Eigenschappen van Verbinding maken ion uitvouwt. De weergegeven resultaten zijn niet altijd voltooid.

Notitie

Net als bij de meeste Windows-services kunt u de SQL Browser-service het beste uitvoeren met de minst mogelijke bevoegdheden.

Een enumerator-exemplaar ophalen

Als u de tabel met informatie over de beschikbare SQL Server-exemplaren wilt ophalen, moet u eerst een enumerator ophalen met behulp van de gedeelde/statische Instance eigenschap:

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

Zodra u het statische exemplaar hebt opgehaald, kunt u de GetDataSources methode aanroepen, die een DataTable bevatde informatie over de beschikbare servers retourneert:

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

De tabel die wordt geretourneerd uit de methode-aanroep bevat de volgende kolommen, die allemaal waarden bevatten string :

Kolom Beschrijving
Servernaam Naam van de server.
Instancename Naam van het serverexemplaren. Leeg als de server wordt uitgevoerd als het standaardexemplaren.
IsClustered Geeft aan of de server deel uitmaakt van een cluster.
Versie Versie van de server. Voorbeeld:

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

Opsommingsbeperkingen

Alle beschikbare servers worden mogelijk wel of niet vermeld. De lijst kan variƫren, afhankelijk van factoren zoals time-outs en netwerkverkeer. Dit kan ertoe leiden dat de lijst verschilt van twee opeenvolgende aanroepen. Alleen servers in hetzelfde netwerk worden vermeld. Broadcast-pakketten gaan meestal niet door routers, daarom ziet u mogelijk geen server vermeld, maar het is stabiel bij aanroepen.

Vermelde servers hebben al dan niet aanvullende informatie, zoals IsClustered en versie. Dit is afhankelijk van hoe de lijst is verkregen. Servers die worden vermeld via de SQL Server-browserservice, hebben meer details dan de servers die worden gevonden via de Windows-infrastructuur, waarin alleen de naam wordt vermeld.

Notitie

Server-inventarisatie is alleen beschikbaar wanneer deze wordt uitgevoerd in volledig vertrouwen. Assembly's die worden uitgevoerd in een gedeeltelijk vertrouwde omgeving, kunnen deze niet gebruiken, zelfs niet als ze de SqlClientPermission cas-machtiging (Code Access Security) hebben.

SQL Server biedt informatie over het SqlDataSourceEnumerator gebruik van een externe Windows-service met de naam SQL Browser. Deze service is standaard ingeschakeld, maar beheerders kunnen deze uitschakelen of uitschakelen, waardoor het serverexemplaren onzichtbaar zijn voor deze klasse.

Opmerking

De volgende consoletoepassing haalt informatie op over alle zichtbare SQL Server-exemplaren en geeft de informatie weer in het consolevenster.

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

Zie ook