Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Процесс получения DbProviderFactory состоит из передачи сведений о поставщике данных классу DbProviderFactories. На основе этих сведений метод GetFactory создает строго типизированную фабрику провайдеров. Например, чтобы создать SqlClientFactory, можно передать GetFactory строку, указывающую имя поставщика в формате «System.Data.SqlClient». Другая перегрузка метода GetFactory принимает DataRow. После создания фабрики поставщика можно использовать ее методы для создания дополнительных объектов. К методам класса SqlClientFactory относятся CreateConnection, CreateCommand и CreateDataAdapter.
Примечание.
Классы OracleClientFactory, OdbcFactory и OleDbFactory также предоставляют аналогичные функциональные возможности.
Регистрация фабрик DbProviderFactory
Каждый поставщик данных .NET Framework, поддерживающий класс на основе фабрики, регистрирует сведения о конфигурации в DbProviderFactories разделе файла machine.config на локальном компьютере. В следующем фрагменте файла конфигурации показан синтаксис и формат для 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>
Атрибут invariant определяет базовый поставщик данных. Этот трехчастный синтаксис именования также используется при создании новой фабрики и для идентификации поставщика в файле конфигурации приложения, чтобы имя поставщика и связанная с ним строка подключения могли быть доступны во время выполнения.
Извлечение информации о поставщике
Сведения обо всех поставщиках, установленных на локальном компьютере, можно получить с помощью метода GetFactoryClasses. Он возвращает DataTable, названный DbProviderFactories, который содержит столбцы, описанные в следующей таблице.
| Порядковый номер столбца | Имя столбца | Пример результата | Описание |
|---|---|---|---|
| 0 | Name |
Поставщик данных SqlClient | Понятное имя поставщика данных. |
| 1 | Description |
Поставщик данных .NET Framework для SqlServer | Понятное описание поставщика данных. |
| 2 | InvariantName |
System.Data.SqlClient | Имя, которое можно использовать программно, чтобы ссылаться на поставщика данных. |
| 3 | AssemblyQualifiedName |
System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 | Полное именование фабричного класса, которое содержит достаточно данных для создания экземпляра объекта. |
Это DataTable можно использовать для того, чтобы пользователь мог выбрать DataRow во время выполнения. Выбранный DataRow затем может передаваться методу GetFactory для создания строго типизированного DbProviderFactory. Выбранный элемент DataRow может быть передан методу GetFactory для создания нужного объекта DbProviderFactory.
Перечисление классов установленных фабрик провайдера
В этом примере демонстрируется, как использовать метод GetFactoryClasses для возвращения таблицы DataTable со сведениями об установленных поставщиках. В коде выполняется проход по каждой строке в DataTable, с выводом информации о каждом установленном поставщике в консольное окно.
// 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
Использование файлов конфигурации приложений для хранения сведений о фабрике
Шаблон проектирования, используемый для работы с фабриками, подразумевает хранение сведений о поставщике и строк подключения в файле конфигурации приложения, например в файле app.config для Windows-приложения и в файле web.config для ASP.NET-приложения.
Следующий фрагмент файла конфигурации демонстрирует, как сохранить две именованные строки подключения: "NorthwindSQL" для подключения к базе данных Northwind в SQL Server и "NorthwindAccess" для подключения к базе данных Northwind в Access/Jet. Имя invariant используется для атрибута 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>
Внимание
Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Если вы подключаетесь к Azure SQL, Управляемые удостоверения для ресурсов Azure — это рекомендуемый метод проверки подлинности.
Получение строки подключения по имени поставщика
Чтобы создать фабрику поставщика, необходимо предоставить строку соединения, а также имя поставщика. В этом примере показано, как получить строка подключения из файла конфигурации приложения, передав имя поставщика в инвариантном формате System.Data.ProviderName. Код проходит итерацию по ConnectionStringSettingsCollection. В случае успеха возвращается ProviderName; в противном случае - null (Nothing в Visual Basic). При наличии нескольких записей для поставщика возвращается первая найденная. Дополнительные сведения и примеры получения строка подключения из файлов конфигурации см. в разделе "Строки подключения" и "Файлы конфигурации".
Примечание.
Для выполнения этого кода необходима ссылка на файл 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
Создание DbProviderFactory и DbConnection
В этом примере показано, как создать DbProviderFactory и DbConnection объект, передав его имя поставщика в формате System.Data.ProviderName и строка подключения. В случае успеха возвращается объект DbConnection; в случае любой ошибки - null (Nothing в Visual Basic).
Этот код получает DbProviderFactory путем вызова GetFactory. Затем метод CreateConnection создает объект DbConnection, а свойству ConnectionString присваивается значение строки соединения.
// 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