Enumerazione di istanze di SQL Server (ADO.NET)Enumerating Instances of SQL Server (ADO.NET)

SQL Server consente alle applicazioni di individuare le istanze di SQL Server all'interno della rete corrente.SQL Server permits applications to find SQL Server instances within the current network. Mediante la classe SqlDataSourceEnumerator queste informazioni vengono esposte allo sviluppatore dell'applicazione che in tal modo dispone di una DataTable contenente dati relativi a tutti i server visibili.The SqlDataSourceEnumerator class exposes this information to the application developer, providing a DataTable containing information about all the visible servers. La tabella restituita contiene un elenco di istanze del server disponibile in rete che corrisponde all'elenco fornito quando un utente tenta di creare una nuova connessione ed espande l'elenco di riepilogo a discesa contenente tutti i server disponibili nella connessione Proprietà la finestra di dialogo.This returned table contains a list of server instances available on the network that matches the list provided when a user attempts to create a new connection, and expands the drop-down list containing all the available servers on the Connection Properties dialog box. I risultati visualizzati non sono sempre completi.The results displayed are not always complete.

Nota

Come nel caso della maggior parte dei servizi Windows, è consigliabile eseguire il servizio Visualizzatore SQL con meno privilegi possibile.As with most Windows services, it is best to run the SQL Browser service with the least possible privileges. Per ulteriori informazioni sul servizio Visualizzatore SQL e su come gestirne il comportamento, vedere la documentazione online di SQL Server.See SQL Server Books Online for more information on the SQL Browser service, and how to manage its behavior.

Recupero di un'istanza di enumeratoreRetrieving an Enumerator Instance

Per recuperare la tabella che contiene le informazioni sulle istanze di SQL Server disponibili, è innanzitutto necessario recuperare un enumeratore utilizzando la proprietà condivisa/statica Instance:In order to retrieve the table containing information about the available SQL Server instances, you must first retrieve an enumerator, using the shared/static Instance property:

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

Dopo aver recuperato l'istanza statica, è possibile chiamare il metodo GetDataSources, che restituisce un tipo DataTable contenente informazioni sui server disponibili:Once you have retrieved the static instance, you can call the GetDataSources method, which returns a DataTable containing information about the available servers:

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

La tabella restituita dalla chiamata al metodo contiene le seguenti colonne, tutte contenenti valori string:The table returned from the method call contains the following columns, all of which contain string values:

ColonnaColumn DescrizioneDescription
ServerNameServerName Nome del server.Name of the server.
NomeIstanzaInstanceName Nome dell'istanza del server.Name of the server instance. Resta vuoto se il server è in esecuzione come istanza predefinita.Blank if the server is running as the default instance.
IsClusteredIsClustered Indica se il server è parte di un cluster.Indicates whether the server is part of a cluster.
VersionVersion Versione del server.Version of the server. Ad esempio:For example:

-9.00. x (SQL Server 2005SQL Server 2005)- 9.00.x (SQL Server 2005SQL Server 2005)
- 10.0.xx (SQL Server 2008SQL Server 2008)- 10.0.xx (SQL Server 2008SQL Server 2008)
- 10.50.x (SQL Server 2008 R2SQL Server 2008 R2)- 10.50.x (SQL Server 2008 R2SQL Server 2008 R2)
-11.0.xx (SQL Server 2012)- 11.0.xx (SQL Server 2012)

Limitazioni delle enumerazioniEnumeration Limitations

È possibile elencare o non elencare tutti i server disponibili.All of the available servers may or may not be listed. L'elenco può variare in base a fattori come i timeout e il traffico di rete.The list can vary depending on factors such as timeouts and network traffic. Pertanto l'elenco può risultare diverso durante due chiamate consecutive.This can cause the list to be different on two consecutive calls. Verranno elencati solo i server nella stessa rete.Only servers on the same network will be listed. Normalmente i pacchetti di broadcast non passeranno dai router. Per questo motivo è possibile che l'utente non visualizzi un server elencato, ma tale server resterà stabile durante le chiamate.Broadcast packets typically won't traverse routers, which is why you may not see a server listed, but it will be stable across calls.

Per i server elencati potrebbero essere disponibili anche informazioni aggiuntive quali IsClustered e la versione,Listed servers may or may not have additional information such as IsClustered and version. a seconda del metodo con cui si è ottenuto l'elenco.This is dependent on how the list was obtained. I server elencati tramite il servizio Visualizzatore di SQL Server presenteranno maggiori dettagli rispetto a quelli rilevati tramite l'infrastruttura Windows, che consente di elencare solo i nomi.Servers listed through the SQL Server browser service will have more details than those found through the Windows infrastructure, which will list only the name.

Nota

L'enumerazione di server è disponibile solo in caso di attendibilità totale.Server enumeration is only available when running in full-trust. Gli assembly eseguiti in un ambiente di attendibilità parziale non saranno in grado di usare la funzionalità, anche se dispongono dell'autorizzazione CAS (Code Access Security, Sicurezza dall'accesso di codice) SqlClientPermission.Assemblies running in a partially-trusted environment will not be able to use it, even if they have the SqlClientPermission Code Access Security (CAS) permission.

SQL Server vengono fornite informazioni per il SqlDataSourceEnumerator tramite l'utilizzo di un servizio Windows esterno denominato Visualizzatore SQL.SQL Server provides information for the SqlDataSourceEnumerator through the use of an external Windows service named SQL Browser. Questo servizio è abilitato per impostazione predefinita, ma gli amministratori possono disattivarlo o disabilitarlo per rendere l'istanza del server invisibile a questa classe.This service is enabled by default, but administrators may turn it off or disable it, making the server instance invisible to this class.

EsempioExample

L'applicazione console riportata di seguito consente di recuperare informazioni su tutte le istanze di SQL Server visibili e di visualizzarle nella finestra della console.The following console application retrieves information about all of the visible SQL Server instances and displays the information in the console window.

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

Vedere ancheSee Also

SQL Server e ADO.NETSQL Server and ADO.NET
Provider gestiti ADO.NET e Centro per sviluppatori di set di datiADO.NET Managed Providers and DataSet Developer Center