Obtention d'un DbProviderFactory
Le processus d'obtention d'un objet DbProviderFactory implique de passer des informations à propos d'un fournisseur de données à la classe DbProviderFactories. En fonction de ces informations, la méthode GetFactory crée une fabrique de fournisseurs fortement typée. Par exemple, pour créer un objet SqlClientFactory, vous pouvez passer à GetFactory
une chaîne avec le nom du fournisseur spécifié comme « System.Data.SqlClient ». L'autre surcharge de GetFactory
prend un objet DataRow. Une fois que vous avez créé la fabrique de fournisseurs, vous pouvez ensuite utiliser ses méthodes pour créer des objets supplémentaires. Parmi les méthodes d'un SqlClientFactory
, citons CreateConnection, CreateCommand et CreateDataAdapter.
Remarque
Les classes OracleClientFactory, OdbcFactory et OleDbFactory fournissent également des fonctionnalités similaires.
Inscription de DbProviderFactories
Chaque fournisseur de données .NET Framework qui prend en charge une classe fondée sur les fabriques enregistre les informations de configuration dans la section DbProviderFactories du fichier machine.config sur l’ordinateur local. Le fragment de fichier de configuration suivant montre la syntaxe et le format de System.Data.SqlClient.
<system.data>
<DbProviderFactories>
<add name="SqlClient Data Provider"
invariant="System.Data.SqlClient"
description=".Net Framework Data Provider for SqlServer"
type="System.Data.SqlClient.SqlClientFactory, System.Data,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
</DbProviderFactories>
</system.data>
L’attribut invariant identifie le fournisseur de données sous-jacent. Cette syntaxe d'attribution de nom en trois parties est également utilisée lors de la création d'une fabrique et pour l'identification du fournisseur dans un fichier de configuration d'application de manière à ce que le nom du fournisseur, ainsi que sa chaîne de connexion associée, puissent être récupérés au moment de l'exécution.
Récupération des informations relatives aux fournisseurs
Vous pouvez récupérer les informations relatives à tous les fournisseurs de données installés sur l'ordinateur local à l'aide de la méthode GetFactoryClasses. Celle-ci retourne un objet DataTable nommé DbProviderFactories contenant les colonnes décrites dans le tableau suivant.
Numéro de colonne | Nom de la colonne | Exemple de sortie | Description |
---|---|---|---|
0 | Nom | Fournisseur de données SqlClient | Nom lisible pour le fournisseur de données |
1 | Description | Fournisseur de données .NET Framework pour SqlServer | Description lisible pour le fournisseur de données |
2 | InvariantName | System.Data.SqlClient | Nom qui peut être utilisé de façon programmée pour faire référence au fournisseur de données |
3 | AssemblyQualifiedName | System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | Nom qualifié complet de la classe de fabrique, contenant suffisamment d'informations pour instancier l'objet |
Cette DataTable
peuvent servir à autoriser un utilisateur à sélectionner un objet DataRow au moment de l'exécution. La DataRow
sélectionnée puis peut être passée à la méthode GetFactory pour créer un objet DbProviderFactory fortement typé. Un objet DataRow sélectionné peut être passé à la méthode GetFactory
pour créer l'objet DbProviderFactory
souhaité.
Liste des classes de fabrique de fournisseurs installées
Cet exemple montre comment utiliser la méthode GetFactoryClasses pour retourner un objet DataTable contenant des informations sur les fournisseurs installés. Le code itère au sein de chaque ligne dans la DataTable
, en affichant des informations pour chaque fournisseur installé dans la fenêtre de console.
// This example assumes a reference to System.Data.Common.
static DataTable GetProviderFactoryClasses()
{
// Retrieve the installed providers and factories.
DataTable table = DbProviderFactories.GetFactoryClasses();
// Display each row and column value.
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
return table;
}
' This example assumes a reference to System.Data.Common.
Private Shared Function GetProviderFactoryClasses() As DataTable
' Retrieve the installed providers and factories.
Dim table As DataTable = DbProviderFactories.GetFactoryClasses()
' Display each row and column value.
Dim row As DataRow
Dim column As DataColumn
For Each row In table.Rows
For Each column In table.Columns
Console.WriteLine(row(column))
Next
Next
Return table
End Function
Utilisation de fichiers de configuration d'application pour stocker des informations sur les fabriques
Le modèle de design permettant d’utiliser des fabriques implique de stocker des informations sur les fournisseurs et les chaînes de connexion dans un fichier de configuration d’application, tel que app.config pour une application Windows, et web.config pour une application ASP.NET.
Le fragment de fichier de configuration suivant montre comment enregistrer deux chaînes de connexion nommées : « NorthwindSQL » pour une connexion dans la base de données Northwind dans SQL Server, et « NorthwindAccess » pour une connexion dans la base de données Northwind dans Access/Jet. Le nom invariant est utilisé pour l’attribut providerName.
<configuration>
<connectionStrings>
<clear/>
<add name="NorthwindSQL"
providerName="System.Data.SqlClient"
connectionString=
"Data Source=MSSQL1;Initial Catalog=Northwind;Integrated Security=true"
/>
<add name="NorthwindAccess"
providerName="System.Data.OleDb"
connectionString=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
/>
</connectionStrings>
</configuration>
Important
Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Si vous vous connectez à Azure SQL, les identités managées pour les ressources Azure sont la méthode d'authentification recommandée.
Récupération d'une chaîne de connexion via nom de fournisseur
Pour créer une fabrique de fournisseurs, vous devez fournir une chaîne de connexion ainsi que le nom du fournisseur. Cet exemple montre comment extraire une chaîne de connexion d’un fichier de configuration d’application en passant le nom du fournisseur dans le format invariant « System.Data.ProviderName ». Le code itère au sein de l'objet ConnectionStringSettingsCollection. Il retourne la propriété ProviderName en cas de réussite; sinon null
(Nothing
dans Visual Basic). S'il existe plusieurs entrées pour un fournisseur, la première occurrence trouvée est retournée. Pour plus d’informations et des exemples d’extraction de chaînes de connexion à partir de fichiers de configuration, consultez Chaînes de connexion et fichiers de configuration.
Notes
Une référence à System.Configuration.dll
est requise pour que le code s'exécute.
// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string? GetConnectionStringByProvider(string providerName)
{
// Get the collection of connection strings.
ConnectionStringSettingsCollection? settings =
ConfigurationManager.ConnectionStrings;
// Walk through the collection and return the first
// connection string matching the providerName.
if (settings != null)
{
foreach (ConnectionStringSettings cs in settings)
{
if (cs.ProviderName == providerName)
{
return cs.ConnectionString;
}
}
}
return null;
}
' Retrieve a connection string by specifying the providerName.
' Assumes one connection string per provider in the config file.
Private Shared Function GetConnectionStringByProvider( _
ByVal providerName As String) As String
'Return Nothing on failure.
Dim returnValue As String = Nothing
' Get the collection of connection strings.
Dim settings As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
' Walk through the collection and return the first
' connection string matching the providerName.
If Not settings Is Nothing Then
For Each cs As ConnectionStringSettings In settings
If cs.ProviderName = providerName Then
returnValue = cs.ConnectionString
Exit For
End If
Next
End If
Return returnValue
End Function
Création des objets DbProviderFactory et DbConnection
Cet exemple montre comment créer un DbProviderFactory et un objet DbConnection en lui passant le nom du fournisseur au format « System.Data.ProviderName » et une chaîne de connexion. Un objet DbConnection
est retourné en cas de réussite ; null
(Nothing
dans Visual Basic) en cas d'erreur.
Le code obtient DbProviderFactory
en appelant GetFactory. La méthode CreateConnection crée ensuite l'objet DbConnection et la propriété ConnectionString prend la valeur de la chaîne de connexion.
// Given a provider name and connection string,
// create the DbProviderFactory and DbConnection.
// Returns a DbConnection on success; null on failure.
static DbConnection CreateDbConnection(
string providerName, string connectionString)
{
// Assume failure.
DbConnection connection = null;
// Create the DbProviderFactory and DbConnection.
if (connectionString != null)
{
try
{
DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);
connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
}
catch (Exception ex)
{
// Set the connection to null if it was created.
if (connection != null)
{
connection = null;
}
Console.WriteLine(ex.Message);
}
}
// Return the connection.
return connection;
}
' Given a provider, create a DbProviderFactory and DbConnection.
' Returns a DbConnection on success; Nothing on failure.
Private Shared Function CreateDbConnection( _
ByVal providerName As String, ByVal connectionString As String) _
As DbConnection
' Assume failure.
Dim connection As DbConnection = Nothing
' Create the DbProviderFactory and DbConnection.
If Not connectionString Is Nothing Then
Try
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(providerName)
connection = factory.CreateConnection()
connection.ConnectionString = connectionString
Catch ex As Exception
' Set the connection to Nothing if it was created.
If Not connection Is Nothing Then
connection = Nothing
End If
Console.WriteLine(ex.Message)
End Try
End If
' Return the connection.
Return connection
End Function