Leggere in inglese

Condividi tramite


Enumerazione di istanze di SQL Server (ADO.NET)

SQL Server consente alle applicazioni di trovare istanze di SQL Server all'interno della rete corrente. La SqlDataSourceEnumerator classe espone queste informazioni allo sviluppatore dell'applicazione, fornendo informazioni DataTable contenenti informazioni su tutti i server visibili. Questa tabella restituita contiene un elenco di istanze del server disponibili nella rete che corrisponde all'elenco fornito quando un utente tenta di creare una nuova connessione ed espande l'elenco a discesa contenente tutti i server disponibili nella finestra di dialogo Proprietà connessione . I risultati visualizzati non sono sempre completi.

Nota

Come per la maggior parte dei servizi Windows, è consigliabile eseguire il servizio SQL Browser con i privilegi minimi possibili.

Recupero di un'istanza dell'enumeratore

Per recuperare la tabella contenente informazioni sulle istanze di SQL Server disponibili, è prima necessario recuperare un enumeratore usando la proprietà condivisa/statica Instance :

System.Data.Sql.SqlDataSourceEnumerator instance =
   System.Data.Sql.SqlDataSourceEnumerator.Instance  

Dopo aver recuperato l'istanza statica, è possibile chiamare il GetDataSources metodo , che restituisce un contenente DataTable informazioni sui server disponibili:

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

La tabella restituita dalla chiamata al metodo contiene le colonne seguenti, tutte contenenti string valori:

colonna Descrizione
Nome del Server Nome del server.
InstanceName Nome dell'istanza del server. Vuoto se il server è in esecuzione come istanza predefinita.
IsClustered Indica se il server fa parte di un cluster.
Versione Versione del server. Per esempio:

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

Limitazioni dell'enumerazione

Tutti i server disponibili possono essere elencati o meno. L'elenco può variare a seconda di fattori quali timeout e traffico di rete. In questo modo l'elenco può essere diverso in due chiamate consecutive. Verranno elencati solo i server nella stessa rete. I pacchetti di trasmissione in genere non attraversano i router, motivo per cui potrebbe non essere visualizzato un server elencato, ma sarà stabile tra le chiamate.

I server elencati possono avere o meno informazioni aggiuntive, ad IsClustered esempio e versione. Questo dipende dal modo in cui è stato ottenuto l'elenco. I server elencati tramite il servizio browser DI SQL Server avranno maggiori dettagli rispetto a quelli trovati tramite l'infrastruttura di Windows, che elenca solo il nome.

Nota

L'enumerazione del server è disponibile solo quando è in esecuzione in modalità attendibilità completa. Gli assembly in esecuzione in un ambiente parzialmente attendibile non potranno usarlo, anche se dispongono dell'autorizzazione SqlClientPermission CAS (Code Access Security).

SQL Server fornisce informazioni per il SqlDataSourceEnumerator tramite l'uso di un servizio Windows esterno denominato SQL Browser. Questo servizio è abilitato per impostazione predefinita, ma gli amministratori possono disattivarlo o disabilitarlo, rendendo l'istanza del server invisibile a questa classe.

Esempio

L'applicazione console seguente recupera informazioni su tutte le istanze di SQL Server visibili e visualizza le informazioni nella finestra della console.

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 anche


Risorse aggiuntive