Dalla versione 2.0 del Framework, Ado.Net è stato arricchito con alcune classi di Factory che permettono la scrittura di un'applicazione "provider indipendent".
Non è più necessario istanziare oggetti castati su un determinato Data Provider. E' possibile utilizzare oggetti generici tipo DBConnection anzichè l'omonio SqlConnection del data provider SqlClient.
I nuovi oggetti generici sono tutti raggruppati sotto il namespace System.Data.Common; ecco alcuni fra questi oggetti:
- DBConnection,
- DBTransaction,
- DBCommand,
- DBDataAdapter ...
Per istanziare questi oggetti in modo corretto bisogna fare riferimento all'oggettto DBProviderFactory e ai suoi metodi:
- CreateCommand,
- CreateConnection,
- CreateDataAdapter ...
L'istanza dell'oggetto DBProviderFactory viene creata dal metodo GetFactory della classe DBProviderFactories.
Ecco un esempio di codice scritto in VB.NET:
Imports System.Data.Common
Imports System.Configuration
......
Sub TestConnection
Dim fact As DbProviderFactory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings("MyDB").ProviderName)
Dim con As DbConnection = fact.CreateConnection
con.ConnectionString = ConfigurationManager.ConnectionStrings("MyDB").ConnectionString
Using con
con.Open()
MessageBox.Show("Connessione aperta!")
End Using
End Sub
L'esempio sopra riportato fa riferimento alla nuova sezione del file di configurazione "ConnectionStrings", usata per definire le stringhe di connessione dell'applicazione, ecco un'esempio:
<connectionStrings>
<add name="MyDB" connectionString="DataSource=localhost; Initial Catalog=TestDB;Integrated Security=true" providerName="System.Data.Sql"/>
</connectionStrings>
A runtime è possibile leggere le informazioni dalla sezione "ConnectionStrings" del file di configurazione utilizzando l'oggetto ConfigurationManager sotto il namespace System.Configuration (verificate di aver referenziato l'assembly System.Configuration.dll)
ConfigurationManager.ConnectionStrings("Nome").ConnectionString.ToString()