Abrufen einer 'DbProviderFactory' (ADO.NET)
Aktualisiert: November 2007
Der Prozess des Abrufens einer DbProviderFactory beinhaltet die Übergabe von Informationen zu einem Datenanbieter an die DbProviderFactories-Klasse. Auf der Grundlage dieser Informationen erstellt die GetFactory-Methode eine stark typisierte Anbieterfactory. So können Sie z. B. zum Erstellen einer SqlClientFactoryGetFactory eine Zeichenfolge übergeben, in der als Anbietername "System.Data.SqlClient" angegeben ist. Die andere Überladung von GetFactory verwendet eine DataRow. Nach dem Erstellen der Anbieterfactory können Sie deren Methoden zum Erstellen zusätzlicher Objekte verwenden. Zu den Methoden einer SqlClientFactory gehören u. a. CreateConnection, CreateCommand und CreateDataAdapter.
Hinweis: |
---|
Die .NET Framework-Klassen OracleClientFactory, OdbcFactory und OleDbFactory bieten die gleiche Funktionalität. |
Registrieren von "DbProviderFactories"
Jeder .NET Framework-Datenanbieter, der eine factorybasierte Klasse unterstützt, registriert die Konfigurationsinformationen im DbProviderFactories-Abschnitt der Datei machine.config auf dem lokalen Computer. Das folgende Konfigurationsdateifragment zeigt die Syntax und das Format für 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>
Das invariant-Attribut identifiziert den zugrunde liegenden Datenanbieter. Diese dreiteilige Benennungssyntax wird auch zum Erstellen einer neuen Factory und zum Identifizieren des Anbieters in einer Anwendungskonfigurationsdatei verwendet, sodass der Anbietername und die damit verknüpfte Verbindungszeichenfolge zur Laufzeit abgerufen werden können.
Abrufen von Anbieterinformationen
Zum Abrufen von Informationen zu allen auf dem lokalen Computer installierten Datenanbietern können Sie die GetFactoryClasses-Methode verwenden. Sie gibt eine DataTable mit dem Namen DbProviderFactories zurück, der die in der folgenden Tabelle beschriebenen Spalten enthält.
Spaltenordinalzahl |
Spaltenname |
Beispielausgabe |
Beschreibung |
---|---|---|---|
0 |
Name |
SqlClient Data Provider |
Lesbarer Name des Datenanbieters |
1 |
Description |
.Net Framework Data Provider for SqlServer |
Lesbare Beschreibung des Datenanbieters |
2 |
InvariantName |
System.Data.SqlClient |
Name, der für programmgesteuerte Verweise auf den Datenanbieter verwendet werden können |
3 |
AssemblyQualifiedName |
System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 |
Voll qualifizierter Name der Factoryklasse, die genügend Informationen zum Instanziieren des Objekts enthält |
Diese DataTable kann verwendet werden, um den Benutzer in die Lage zu versetzen, zur Laufzeit eine DataRow auszuwählen. Die ausgewählte DataRow kann dann an die GetFactory-Methode übergeben werden, um eine stark typisierte DbProviderFactory zu erstellen. Eine ausgewählte DataRow kann an die GetFactory-Methode übergeben werden, um das gewünschte DbProviderFactory-Objekt zu erstellen.
Auflisten der installierten Anbieterfactoryklassen
Dieses Beispiel zeigt, wie Sie mit der GetFactoryClasses-Methode eine DataTable mit Informationen zu den installierten Anbietern zurückgeben können. Der Code durchläuft jede Zeile in der DataTable und zeigt im Konsolenfenster die Informationen zu den einzelnen installierten Anbietern an.
' 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
// 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;
}
Verwenden von Anwendungskonfigurationsdateien zum Speichern von Factoryinformationen
Das zum Arbeiten mit Factorys verwendete Entwurfsmuster erlaubt das Speichern von Anbieter- und Verbindungszeichenfolgeninformationen in einer Anwendungskonfigurationsdatei, z. B. in app.config für Windows-Anwendungen und in web.config für ASP.NET-Anwendungen.
Das folgende Konfigurationsdateifragment zeigt, wie zwei benannte Verbindungszeichenfolgen, NorthwindSQL für eine Verbindung mit der Northwind-Datenbank in SQL Server und NorthwindAccess für eine Verbindung mit der Northwind-Datenbank in Access/Jet, gespeichert werden können. Für das providerName-Attribut wird der invariant-Name verwendet.
<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>
Abrufen einer Verbindungszeichenfolge nach Anbietername
Zum Erstellen einer Anbieterfactory müssen Sie sowohl eine Verbindungszeichenfolge als auch den Anbieternamen bereitstellen. In diesem Beispiel wird gezeigt, wie durch Übergabe des Anbieternamens im unveränderlichen Format System.Data.ProviderName eine Verbindungszeichenfolge aus einer Anwendungskonfigurationsdatei abgerufen werden kann. Der Code durchläuft die ConnectionStringSettingsCollection. Im Erfolgsfall gibt er den ProviderName zurück, anderenfalls null (Nothing in Visual Basic)+++. Wenn es für einen Anbieter mehrere Einträge gibt, wird der erste gefundene Eintrag zurückgegeben. Weitere Informationen und Beispiele zum Abrufen von Verbindungszeichenfolgen aus Konfigurationsdateien finden Sie unter Verbindungszeichenfolgen und Konfigurationsdateien (ADO.NET).
Hinweis: |
---|
Zum Ausführen des Codes ist ein Verweis auf System.Configuration.dll erforderlich. |
' 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
// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string GetConnectionStringByProvider(string providerName)
{
// Return null on failure.
string returnValue = null;
// 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)
returnValue = cs.ConnectionString;
break;
}
}
return returnValue;
}
Erstellen der "DbProviderFactory" und der "DbConnection"
In diesem Beispiel wird gezeigt, wie eine DbProviderFactory und ein DbConnection-Objekt erstellt werden kann, indem ihm der Anbietername im Format System.Data.ProviderName und eine Verbindungszeichenfolge übergeben werden. Im Erfolgsfall wird ein DbConnection-Objekt zurückgegeben, anderenfalls null (Nothing in Visual Basic)+++.
Der Code ruft die DbProviderFactory ab, indem er GetFactory aufruft. Dann erstellt die CreateConnection-Methode das DbConnection-Objekt, und die ConnectionString-Eigenschaft wird auf die Verbindungszeichenfolge festgelegt.
' 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
// 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;
}
Siehe auch
Konzepte
Verwenden der Konfigurationsklassen