Uzyskiwanie DbProviderFactory
Proces uzyskiwania obiektu DbProviderFactory obejmuje przekazywanie informacji o dostawcy danych do DbProviderFactories klasy. Na podstawie tych informacji GetFactory metoda tworzy silnie typizowana fabrykę dostawcy. Aby na przykład utworzyć element SqlClientFactory, można przekazać GetFactory
ciąg z nazwą dostawcy określoną jako "System.Data.SqlClient". Inne przeciążenie przyjmuje GetFactory
element DataRow. Po utworzeniu fabryki dostawcy możesz użyć jej metod w celu utworzenia dodatkowych obiektów. Niektóre metody elementu SqlClientFactory
to CreateConnection, CreateCommandi CreateDataAdapter.
Uwaga
Klasy OracleClientFactory, OdbcFactoryi OleDbFactory zapewniają również podobne funkcje.
Rejestrowanie elementów DbProviderFactories
Każdy dostawca danych programu .NET Framework obsługujący klasę opartą na fabryce rejestruje informacje o konfiguracji w sekcji DbProviderFactories pliku machine.config na komputerze lokalnym. Poniższy fragment pliku konfiguracji przedstawia składnię i format pliku .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>
Niezmienny atrybut identyfikuje bazowego dostawcę danych. Ta trzyczęściowa składnia nazewnictwa jest również używana podczas tworzenia nowej fabryki i identyfikowania dostawcy w pliku konfiguracji aplikacji, aby można było pobrać nazwę dostawcy wraz ze skojarzonymi parametry połączenia w czasie wykonywania.
Pobieranie informacji o dostawcy
Informacje o wszystkich dostawcach danych zainstalowanych na komputerze lokalnym można pobrać przy użyciu GetFactoryClasses metody . Zwraca on nazwę DbProviderFactories zawierającą DataTable kolumny opisane w poniższej tabeli.
Porządkowe kolumny | Nazwa kolumny | Przykładowe dane wyjściowe | opis |
---|---|---|---|
0 | Nazwa/nazwisko | Dostawca danych SqlClient | Czytelna nazwa dostawcy danych |
1 | Opis | Dostawca danych programu .Net Framework dla programu SqlServer | Czytelny opis dostawcy danych |
2 | InvariantName | System.Data.SqlClient | Nazwa, która może służyć programowo do odwoływania się do dostawcy danych |
3 | AssemblyQualifiedName | System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | W pełni kwalifikowana nazwa klasy fabryki, która zawiera wystarczające informacje, aby utworzyć wystąpienie obiektu |
Może to DataTable
służyć do umożliwienia użytkownikowi wybrania DataRow elementu w czasie wykonywania. Następnie wybraną DataRow
metodę GetFactory można przekazać do metody w celu utworzenia silnie typizowanego DbProviderFactoryelementu . Wybraną DataRow metodę GetFactory
można przekazać do metody w celu utworzenia żądanego DbProviderFactory
obiektu.
Wyświetlanie listy zainstalowanych klas fabryk dostawcy
W tym przykładzie pokazano, jak za pomocą GetFactoryClasses metody zwracać DataTable zawierające informacje o zainstalowanych dostawcach. Kod iteruje poszczególne wiersze w DataTable
obiekcie , wyświetlając informacje dla każdego zainstalowanego dostawcy w oknie konsoli.
// 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
Używanie plików konfiguracji aplikacji do przechowywania informacji o fabryce
Wzorzec projektowy używany do pracy z fabrykami wiąże się z przechowywaniem dostawcy i parametry połączenia informacji w pliku konfiguracji aplikacji, takim jak app.config dla aplikacji systemu Windows i web.config dla aplikacji ASP.NET.
Poniższy fragment pliku konfiguracji przedstawia sposób zapisywania dwóch nazwanych parametry połączenia: "NorthwindSQL" dla połączenia z bazą danych Northwind w programie SQL Server i "NorthwindAccess" dla połączenia z bazą danych Northwind w programie Access/Jet. Niezmienna nazwa jest używana dla atrybutu 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>
Ważne
Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, tożsamości zarządzane dla zasobów platformy Azure to zalecana metoda uwierzytelniania.
Pobieranie parametrów połączenia według nazwy dostawcy
Aby utworzyć fabrykę dostawcy, należy podać parametry połączenia oraz nazwę dostawcy. W tym przykładzie pokazano, jak pobrać parametry połączenia z pliku konfiguracji aplikacji, przekazując nazwę dostawcy w niezmiennym formacie "System.Data.ProviderName". Kod iteruje za pośrednictwem .ConnectionStringSettingsCollection Zwraca wartość przy powodzeniu ProviderName ; w przeciwnym razie null
(Nothing
w Visual Basic). Jeśli istnieje wiele wpisów dla dostawcy, zwracany jest pierwszy znaleziony. Aby uzyskać więcej informacji i przykłady pobierania parametry połączenia z plików konfiguracji, zobacz Parametry połączenia i pliki konfiguracji.
Uwaga
Odwołanie do System.Configuration.dll
elementu jest wymagane w celu uruchomienia kodu.
// 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
Tworzenie elementu DbProviderFactory i DbConnection
W tym przykładzie pokazano, jak utworzyć DbProviderFactory obiekt iDbConnection, przekazując mu nazwę dostawcy w formacie "System.Data.ProviderName" i parametry połączenia. Obiekt DbConnection
jest zwracany po powodzeniu; null
(Nothing
w Visual Basic) w przypadku dowolnego błędu.
Kod uzyskuje element DbProviderFactory
przez wywołanie metody GetFactory. CreateConnection Następnie metoda tworzy DbConnection obiekt, a ConnectionString właściwość jest ustawiona na parametry połączenia.
// 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