Een DbProviderFactory verkrijgen
Het proces van het verkrijgen van een DbProviderFactory gegevens omvat het doorgeven van informatie over een gegevensprovider aan de DbProviderFactories klasse. Op basis van deze informatie maakt de GetFactory methode een sterk getypeerde providerfactory. Als u bijvoorbeeld een SqlClientFactorytekenreeks wilt maken, kunt u een tekenreeks doorgeven GetFactory
met de providernaam die is opgegeven als System.Data.SqlClient. De andere overbelasting van GetFactory
neemt een DataRow. Zodra u de providerfactory hebt gemaakt, kunt u de methoden ervan gebruiken om extra objecten te maken. Enkele van de methoden van een SqlClientFactory
include CreateConnection, CreateCommanden CreateDataAdapter.
Notitie
De OracleClientFactory, OdbcFactoryen OleDbFactory klassen bieden ook vergelijkbare functionaliteit.
DbProviderFactories registreren
Elke .NET Framework-gegevensprovider die ondersteuning biedt voor een factory-klasse registreert configuratiegegevens in de sectie DbProviderFactories van het bestand machine.config op de lokale computer. In het volgende fragment van het configuratiebestand ziet u de syntaxis en indeling voor 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>
Het kenmerk invariant identificeert de onderliggende gegevensprovider. Deze driedelige naamgevingsyntaxis wordt ook gebruikt bij het maken van een nieuwe factory en voor het identificeren van de provider in een toepassingsconfiguratiebestand, zodat de providernaam, samen met de bijbehorende verbindingsreeks, tijdens runtime kan worden opgehaald.
Providergegevens ophalen
U kunt informatie ophalen over alle gegevensproviders die op de lokale computer zijn geïnstalleerd met behulp van de GetFactoryClasses methode. Het retourneert een DataTable benoemde DbProviderFactories die de kolommen bevat die in de volgende tabel worden beschreven.
Kolomordinaal | Kolomnaam | Voorbeelduitvoer | Beschrijving |
---|---|---|---|
0 | Naam | SqlClient-gegevensprovider | Leesbare naam voor de gegevensprovider |
1 | Beschrijving | .Net Framework-gegevensprovider voor SqlServer | Leesbare beschrijving van de gegevensprovider |
2 | InvariantName | System.Data.SqlClient | Naam die programmatisch kan worden gebruikt om te verwijzen naar de gegevensprovider |
3 | AssemblyQualifiedName | System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | Volledig gekwalificeerde naam van de fabrieksklasse, die voldoende informatie bevat om het object te instantiëren |
Dit DataTable
kan worden gebruikt om een gebruiker in staat te stellen een DataRow runtime te selecteren. De geselecteerde DataRow
kan vervolgens worden doorgegeven aan de GetFactory methode om een sterk getypte DbProviderFactorymethode te maken. Een geselecteerde DataRow kan worden doorgegeven aan de GetFactory
methode om het gewenste DbProviderFactory
object te maken.
De geïnstalleerde Provider Factory-klassen weergeven
In dit voorbeeld ziet u hoe u de GetFactoryClasses methode gebruikt om een DataTable met informatie over de geïnstalleerde providers te retourneren. De code doorloopt elke rij in de DataTable
, met informatie voor elke geïnstalleerde provider in het consolevenster.
// 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
Toepassingsconfiguratiebestanden gebruiken om fabrieksgegevens op te slaan
Het ontwerppatroon dat wordt gebruikt voor het werken met factory's, omvat het opslaan van provider- en verbindingsreeks informatie in een toepassingsconfiguratiebestand, zoals app.config voor een Windows-toepassing en web.config voor een ASP.NET-toepassing.
Het volgende fragment van het configuratiebestand laat zien hoe u twee benoemde verbindingsreeks s opslaat: 'NorthwindSQL' voor een verbinding met de Northwind-database in SQL Server en 'NorthwindAccess' voor een verbinding met de Northwind-database in Access/Jet. De invariantnaam wordt gebruikt voor het kenmerk 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>
Belangrijk
Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. Als u verbinding maakt met Azure SQL, is Managed Identities voor Azure-resources de aanbevolen verificatiemethode.
Een verbindingsreeks ophalen op providernaam
Als u een providerfactory wilt maken, moet u een verbindingsreeks en de providernaam opgeven. In dit voorbeeld ziet u hoe u een verbindingsreeks ophaalt uit een toepassingsconfiguratiebestand door de providernaam door te geven in de invariant-indeling System.Data.ProviderName. De code doorloopt de ConnectionStringSettingsCollection. De functie retourneert de ProviderName on-geslaagde bewerking; anders null
(Nothing
in Visual Basic). Als er meerdere vermeldingen voor een provider zijn, wordt het eerste gevonden item geretourneerd. Zie Verbindingsreeksen en configuratiebestanden voor meer informatie en voorbeelden van het ophalen van verbindingsreeks s uit configuratiebestanden.
Notitie
Er is een verwijzing naar System.Configuration.dll
vereist om de code uit te voeren.
// 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
DbProviderFactory en DbConnection maken
In dit voorbeeld ziet u hoe u een DbProviderFactory en DbConnection object maakt door deze de naam van de provider door te geven in de indeling System.Data.ProviderName en een verbindingsreeks. Een DbConnection
object wordt geretourneerd bij succes; null
(Nothing
in Visual Basic) bij een fout.
De code verkrijgt de DbProviderFactory
door aanroepen GetFactory. Vervolgens maakt de CreateConnection methode het DbConnection object en wordt de ConnectionString eigenschap ingesteld op de verbindingsreeks.
// 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