Hämta en DbProviderFactory
Processen för att hämta en DbProviderFactory innebär att skicka information om en dataprovider till DbProviderFactories klassen. Baserat på den här informationen GetFactory skapar metoden en starkt typad leverantörsfabrik. Om du till exempel vill skapa en SqlClientFactorykan du skicka GetFactory
en sträng med providernamnet som anges som "System.Data.SqlClient". Den andra överlagringen av GetFactory
tar en DataRow. När du har skapat providerfabriken kan du sedan använda dess metoder för att skapa ytterligare objekt. Några av metoderna i en SqlClientFactory
inkluderar CreateConnection, CreateCommandoch CreateDataAdapter.
Kommentar
Klasserna OracleClientFactory, OdbcFactoryoch OleDbFactory ger också liknande funktioner.
Registrera DbProviderFactories
Varje .NET Framework-dataprovider som stöder en fabriksbaserad klass registrerar konfigurationsinformation i avsnittet DbProviderFactories i filen machine.config på den lokala datorn. Följande konfigurationsfilfragment visar syntaxen och formatet 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>
Attributet invariant identifierar den underliggande dataprovidern. Den här namngivningssyntaxen i tre delar används också när du skapar en ny fabrik och för att identifiera providern i en programkonfigurationsfil så att providernamnet, tillsammans med dess associerade anslutningssträng, kan hämtas vid körning.
Hämtar providerinformation
Du kan hämta information om alla dataproviders som är installerade på den lokala datorn med hjälp GetFactoryClasses av metoden . Den returnerar en DataTable namngiven DbProviderFactories som innehåller kolumnerna som beskrivs i följande tabell.
Kolumnordning | Kolumnnamn | Exempel på utdata | beskrivning |
---|---|---|---|
0 | Namn | SqlClient-dataprovider | Läsbart namn för dataprovidern |
1 | Beskrivning | .Net Framework Data Provider för SqlServer | Läsbar beskrivning av dataprovidern |
2 | InvariantName | System.Data.SqlClient | Namn som kan användas programmatiskt för att referera till dataprovidern |
3 | AssemblyQualifiedName | System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | Fullständigt kvalificerat namn på fabriksklassen, som innehåller tillräckligt med information för att instansiera objektet |
Detta DataTable
kan användas för att göra det möjligt för en användare att välja en DataRow vid körning. Den valda DataRow
kan sedan skickas till GetFactory metoden för att skapa en starkt typad DbProviderFactory. En markerad DataRow kan skickas till GetFactory
metoden för att skapa det önskade DbProviderFactory
objektet.
Visa en lista över installerade providerfabriksklasser
Det här exemplet visar hur du använder GetFactoryClasses metoden för att returnera en DataTable innehållande information om de installerade leverantörerna. Koden itererar genom varje rad i och DataTable
visar information för varje installerad provider i konsolfönstret.
// 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
Använda programkonfigurationsfiler för att lagra fabriksinformation
Designmönstret som används för att arbeta med fabriker innebär att providern och anslutningssträng information lagras i en programkonfigurationsfil, till exempel app.config för ett Windows-program och web.config för ett ASP.NET program.
Följande konfigurationsfilfragment visar hur du sparar två namngivna anslutningssträng: "NorthwindSQL" för en anslutning till Northwind-databasen i SQL Server och "NorthwindAccess" för en anslutning till Northwind-databasen i Access/Jet. Det invarianta namnet används för attributet 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>
Viktigt!
Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Om du ansluter till Azure SQL är hanterade identiteter för Azure-resurser den rekommenderade autentiseringsmetoden.
Hämta en anslutningssträng efter providernamn
För att kunna skapa en providerfabrik måste du ange en anslutningssträng samt providernamnet. Det här exemplet visar hur du hämtar en anslutningssträng från en programkonfigurationsfil genom att skicka providernamnet i det invarianta formatet "System.Data.ProviderName". Koden itererar via ConnectionStringSettingsCollection. Den returnerar vid ProviderName lyckat resultat, annars null
(Nothing
i Visual Basic). Om det finns flera poster för en provider returneras den första som hittas. Mer information och exempel på hur du hämtar anslutningssträng från konfigurationsfiler finns i Anslutningssträngar och Konfigurationsfiler.
Kommentar
En referens till System.Configuration.dll
krävs för att koden ska kunna köras.
// 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
Skapa DbProviderFactory och DbConnection
Det här exemplet visar hur du skapar ett DbProviderFactory objekt och DbConnection genom att skicka providernamnet i formatet "System.Data.ProviderName" och en anslutningssträng. Ett DbConnection
objekt returneras vid lyckat resultat. null
(Nothing
i Visual Basic) om eventuella fel.
Koden hämtar genom att DbProviderFactory
anropa GetFactory. CreateConnection Sedan skapar DbConnection metoden objektet och egenskapen ConnectionString är inställd på anslutningssträng.
// 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