Získání DbProviderFactory
Proces získání DbProviderFactory zahrnuje předání informací o poskytovateli dat do DbProviderFactories třídy. Na základě těchto informací GetFactory metoda vytvoří objekt pro vytváření zprostředkovatele silného typu. Pokud například chcete vytvořit SqlClientFactory, můžete předat GetFactory
řetězec s názvem zprostředkovatele zadaným jako "System.Data.SqlClient". Druhé přetížení GetFactory
přebírá DataRow. Jakmile vytvoříte objekt pro vytváření zprostředkovatele, můžete pomocí jeho metod vytvořit další objekty. Některé metody SqlClientFactory
zahrnutí CreateConnection, CreateCommanda CreateDataAdapter.
Poznámka:
Třídy OracleClientFactory, OdbcFactorya OleDbFactory třídy také poskytují podobné funkce.
Registrace DbProviderFactories
Každý zprostředkovatel dat rozhraní .NET Framework, který podporuje třídu založenou na továrně, registruje konfigurační informace v části DbProviderFactories souboru machine.config v místním počítači. Následující fragment konfiguračního souboru ukazuje syntaxi a formát pro 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>
Invariantní atribut identifikuje podkladového zprostředkovatele dat. Tato třídílná syntaxe pojmenování se používá také při vytváření nové továrny a k identifikaci zprostředkovatele v konfiguračním souboru aplikace, aby se název zprostředkovatele společně s přidruženými připojovací řetězec mohl načíst za běhu.
Načítání informací o zprostředkovateli
Pomocí této metody můžete načíst informace o všech poskytovatelích dat nainstalovaných v místním počítači GetFactoryClasses . Vrátí pojmenovanou DataTable DbProviderFactories , která obsahuje sloupce popsané v následující tabulce.
Řadový sloupcový | Název sloupce | Příklad výstupu | Popis |
---|---|---|---|
0 | Název | Zprostředkovatel dat SqlClient | Čitelný název zprostředkovatele dat |
0 | Popis | Rozhraní .Net Framework Zprostředkovatel dat pro SQLServer | Čitelný popis zprostředkovatele dat |
2 | InvariantName | System.Data.SqlClient | Název, který lze použít programově k odkazování na zprostředkovatele dat |
3 | AssemblyQualifiedName | System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | Plně kvalifikovaný název třídy továrny, která obsahuje dostatek informací pro vytvoření instance objektu |
To DataTable
se dá použít k povolení výběru uživatele DataRow za běhu. DataRow
Vybranou možnost pak lze předat GetFactory metodě vytvořit silné typ .DbProviderFactory Vybranou DataRow metodu GetFactory
lze předat k vytvoření požadovaného DbProviderFactory
objektu.
Výpis nainstalovaných tříd služby Provider Factory
Tento příklad ukazuje, jak použít metodu GetFactoryClasses k vrácení DataTable obsahující informace o nainstalovaných poskytovateli. Kód prochází každý řádek v okně DataTable
konzoly a zobrazuje informace pro každého nainstalovaného zprostředkovatele.
// 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
Použití konfiguračních souborů aplikace k ukládání informací o továrně
Vzor návrhu používaný pro práci s továrnami zahrnuje ukládání informací o poskytovateli a připojovací řetězec v konfiguračním souboru aplikace, jako je app.config pro aplikaci pro Windows a web.config pro aplikaci ASP.NET.
Následující fragment konfiguračního souboru ukazuje, jak uložit dva pojmenované připojovací řetězec: "NorthwindSQL" pro připojení k databázi Northwind v SQL Serveru a "NorthwindAccess" pro připojení k databázi Northwind v Accessu/Jet. Invariantní název se používá pro atribut 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>
Důležité
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, spravované identity pro prostředky Azure se doporučují metodou ověřování.
Načtení připojovacího řetězce podle názvu zprostředkovatele
Chcete-li vytvořit továrnu poskytovatele, musíte zadat připojovací řetězec a také název poskytovatele. Tento příklad ukazuje, jak načíst připojovací řetězec z konfiguračního souboru aplikace předáním názvu zprostředkovatele v invariantním formátu "System.Data.ProviderName". Kód prochází .ConnectionStringSettingsCollection Vrátí úspěch ProviderName ; jinak null
(Nothing
v jazyce Visual Basic). Pokud je pro zprostředkovatele více položek, vrátí se první nalezený záznam. Další informace a příklady načítání připojovací řetězec z konfiguračních souborů najdete v tématu Připojovací řetězce a konfigurační soubory.
Poznámka:
Aby se kód spustil, vyžaduje se odkaz na tento odkaz System.Configuration.dll
.
// 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
Vytvoření DbProviderFactory a DbConnection
Tento příklad ukazuje, jak vytvořit DbProviderFactory a DbConnection objekt předáním názvu zprostředkovatele ve formátu System.Data.ProviderName a připojovací řetězec. Objekt DbConnection
je vrácen při úspěchu; null
(Nothing
v jazyce Visual Basic) u jakékoli chyby.
Kód získá DbProviderFactory
voláním GetFactory. CreateConnection Pak metoda vytvoří DbConnection objekt a ConnectionString vlastnost je nastavena na připojovací řetězec.
// 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