DbProviderFactory beszerzése
A beszerzés DbProviderFactory folyamata magában foglalja egy adatszolgáltatóval kapcsolatos információk átadását az DbProviderFactories osztálynak. Ezen információk alapján a GetFactory metódus egy erősen gépelt szolgáltató-előállítót hoz létre. Létrehozhat például egy SqlClientFactoryGetFactory
sztringet a "System.Data.SqlClient" néven megadott szolgáltatónévvel. A másik túlterhelése GetFactory
vesz egy DataRow. A szolgáltató-előállító létrehozása után a metódusaival további objektumokat hozhat létre. A metódusok némelyike SqlClientFactory
a következők: CreateConnection, CreateCommandés CreateDataAdapter.
Feljegyzés
A OracleClientFactory, OdbcFactoryés OleDbFactory az osztályok is hasonló funkciókat biztosítanak.
DbProviderFactories regisztrálása
Minden .NET-keretrendszer gyári osztályt támogató adatszolgáltató a konfigurációs adatokat a machine.config fájl DbProviderFactories szakaszában regisztrálja a helyi számítógépen. Az alábbi konfigurációs fájlrészlet a szintaxist és a formátumot System.Data.SqlClientmutatja be.
<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>
Az invariáns attribútum azonosítja a mögöttes adatszolgáltatót . Ez a háromrészes elnevezési szintaxis egy új gyár létrehozásakor és a szolgáltató alkalmazáskonfigurációs fájlban való azonosítására is használható, hogy a szolgáltató neve és a hozzá tartozó kapcsolati sztring futásidőben lekérhető legyen.
Szolgáltató adatainak lekérése
A módszer használatával GetFactoryClasses lekérheti a helyi számítógépen telepített összes adatszolgáltató adatait. Egy dbProviderFactories nevű értéket ad DataTable vissza, amely az alábbi táblázatban leírt oszlopokat tartalmazza.
Oszloprend | Oszlop neve | Példakimenet | Leírás |
---|---|---|---|
0 | Név | SqlClient-adatszolgáltató | Az adatszolgáltató olvasható neve |
0 | Leírás | .Net-keretrendszer adatszolgáltatója az SqlServerhez | Az adatszolgáltató olvasható leírása |
2 | InvariantName | System.Data.SqlClient | Az adatszolgáltatóra programozott módon hivatkozható név |
3 | AssemblyQualifiedName | System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | A gyári osztály teljes neve, amely elegendő információt tartalmaz az objektum példányosításához |
Ez DataTable
lehetővé teszi, hogy a felhasználó futásidőben válasszon ki egyet DataRow . A kijelölt DataRow
fájl ezután átadható a GetFactory metódusnak egy erősen begépelt DbProviderFactoryelem létrehozásához. A kijelölt DataRow objektum átadható a metódusnak a GetFactory
kívánt DbProviderFactory
objektum létrehozásához.
A telepített szolgáltatói gyári osztályok listázása
Ez a példa bemutatja, hogyan használható a GetFactoryClasses metódus a telepített szolgáltatókra vonatkozó információkat tartalmazó adatok visszaadására DataTable . A kód végigfut a DataTable
konzolablak minden egyes során, és megjeleníti az egyes telepített szolgáltatók adatait.
// 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
Alkalmazáskonfigurációs fájlok használata a gyári adatok tárolásához
A gyárakban való munkavégzéshez használt tervezési minta magában foglalja a szolgáltatói és kapcsolati sztring információk tárolását egy alkalmazáskonfigurációs fájlban, például egy Windows-alkalmazás app.config-jában, valamint egy ASP.NET-alkalmazás web.config-jának tárolását.
A következő konfigurációs fájlrészlet bemutatja, hogyan menthet két elnevezett kapcsolati sztring: "NorthwindSQL" az SQL Server Northwind-adatbázisával való kapcsolathoz, a NorthwindAccess pedig az Access/Jet Northwind-adatbázishoz való csatlakozáshoz. Az invariáns nevet a providerName attribútum használja.
<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>
Fontos
A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Ha azure SQL-hez csatlakozik, az Azure-erőforrások felügyelt identitásai az ajánlott hitelesítési módszer.
Kapcsolati sztring lekérése szolgáltatónév alapján
A szolgáltató-előállító létrehozásához meg kell adnia egy kapcsolati sztring és a szolgáltató nevét. Ez a példa bemutatja, hogyan kérhető le egy kapcsolati sztring egy alkalmazáskonfigurációs fájlból a szolgáltató nevének "System.Data.ProviderName" invariáns formátumban való átadásával. A kód a ConnectionStringSettingsCollection. A sikerességet adja ProviderName vissza, ellenkező esetben null
(Nothing
a Visual Basicben). Ha egy szolgáltató több bejegyzést is tartalmaz, a rendszer az elsőt adja vissza. További információ és példák a kapcsolati sztring konfigurációs fájlokból való lekéréséről: Kapcsolati sztringek és konfigurációs fájlok.
Feljegyzés
A kód futtatásához hivatkozni System.Configuration.dll
kell.
// 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
A DbProviderFactory és a DbConnection létrehozása
Ez a példa bemutatja, hogyan hozhat létre és hozhat létre DbProviderFactory objektumot úgy, hogy átadja neki a "System.Data.ProviderName" formátumú szolgáltatónevet és egy DbConnection kapcsolati sztring. Egy DbConnection
objektum sikeres visszaadása; null
(Nothing
a Visual Basicben) bármilyen hiba esetén.
A kód hívással szerzi be a DbProviderFactory
kódot GetFactory. Ezután a CreateConnection metódus létrehozza az DbConnection objektumot, és a ConnectionString tulajdonság a kapcsolati sztring van beállítva.
// 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