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