Langue
Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 GetFactory méthode retourne une fabrique de fournisseur fortement typée. Par exemple, après vous être inscrit SqlClientFactory, passez GetFactory le nom du fournisseurMicrosoft.Data.SqlClient. Une autre surcharge de GetFactory prend un DataRow. Une fois que vous avez obtenu 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.
Enregistrement de DbProviderFactories
Installez le package NuGet Microsoft.Data.SqlClient avant d’enregistrer sa fabrique.
Sur .NET Framework, ajoutez la section suivante system.data à l’intérieur de l’élément configuration du fichier web.config ou app.config de votre application. L’élément remove évite les enregistrements en double hérités d’un autre fichier de configuration.
<system.data>
<DbProviderFactories>
<remove invariant="Microsoft.Data.SqlClient" />
<add name="Microsoft SqlClient Data Provider"
invariant="Microsoft.Data.SqlClient"
description="Microsoft SqlClient Data Provider for SQL Server"
type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient"
/>
</DbProviderFactories>
</system.data>
Sur les .NET modernes, les fichiers de configuration n’enregistrent pas les fabriques de fournisseurs de données. Avant d’appeler GetFactory, appelez RegisterFactory(String, DbProviderFactory) avec Microsoft.Data.SqlClient comme nom du fournisseur et Instance comme instance de fabrique.
RegisterFactoryn'est pas disponible sur .NET Framework.
Les exemples suivants enregistrent la fabrique dans le code pour les .NET modernes. Pour .NET Framework, utilisez l’entrée de configuration précédente et omettez tout RegisterFactory appel.
Le nom invariant du fournisseur identifie le fournisseur de données sous-jacent. Utilisez le même nom pour les recherches de fabrique et l’attribut providerName d’une chaîne de connexion.
Récupération des informations relatives aux fournisseurs
Vous pouvez récupérer des informations sur les fournisseurs de données inscrits en utilisant la méthode GetFactoryClasses. Il retourne un DataTable nommé DbProviderFactories qui contient les colonnes décrites dans le tableau suivant. Les exemples de valeurs correspondent à l’entrée de configuration .NET Framework affichée précédemment ; les détails de la version de l’assembly dépendent du package installé.
| Numéro de colonne | Nom de la colonne | Exemple de sortie | Descriptif |
|---|---|---|---|
| 0 | Name |
Microsoft Fournisseur de données SqlClient | Nom lisible pour le fournisseur de données |
| 1 | Description |
Microsoft SqlClient Fournisseur de données for SQL Server | Description lisible pour le fournisseur de données |
| 2 | InvariantName |
Microsoft.Data.SqlClient | Nom qui peut être utilisé de façon programmée pour faire référence au fournisseur de données |
| 3 | AssemblyQualifiedName |
Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient | Nom qualifié d’assembly de la classe de fabrique |
Vous pouvez utiliser ce DataTable pour permettre à un utilisateur de sélectionner un 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 parcourt chaque ligne dans la DataTable, affichant des informations pour chaque fournisseur installé dans la fenêtre de la console.
// This example assumes a reference to System.Data.Common.
static DataTable GetProviderFactoryClasses()
{
#if !NETFRAMEWORK
DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance);
#endif
// 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
#If Not NETFRAMEWORK Then
DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance)
#End If
' 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 conception utilisé pour travailler avec des fabriques consiste à stocker les informations de fournisseur et de chaîne 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 invariant nom est utilisé pour l’attribut providerName .
<configuration>
<connectionStrings>
<clear/>
<add name="NorthwindSQL"
providerName="Microsoft.Data.SqlClient"
connectionString=
"Data Source=<server>;Initial Catalog=Northwind;Integrated Security=true;Encrypt=true"
/>
<add name="NorthwindAccess"
providerName="System.Data.OleDb"
connectionString=
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Northwind.mdb;"
/>
</connectionStrings>
</configuration>
Importante
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 connexion via un fournisseur de fabrique, vous devez fournir une chaîne de connexion ainsi que le nom du fournisseur. Cet exemple montre comment récupérer un chaîne de connexion à partir d’un fichier de configuration d’application en passant le nom du fournisseur invariant, tel que Microsoft.Data.SqlClient. Le code itère au sein de l'objet ConnectionStringSettingsCollection. Elle retourne la chaîne de connexion correspondante 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.
Remarque
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 de DbProviderFactory et DbConnection
Cet exemple montre comment créer un objet DbProviderFactory et un objet DbConnection en lui transmettant le nom du fournisseur invariant, tel que Microsoft.Data.SqlClient, 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
{
#if !NETFRAMEWORK
if (providerName == "Microsoft.Data.SqlClient")
{
DbProviderFactories.RegisterFactory(providerName, SqlClientFactory.Instance);
}
#endif
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
#If Not NETFRAMEWORK Then
DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance)
#End If
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