Читать «ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание» онлайн - страница 565

Эндрю Троелсен

• DbCommand – абстрактный базовый класс для объектов команд;

• DbConnection – абстрактный базовый класс для объектов соединения;

• DbDataAdapter – абстрактный базовый класс для объектов адаптера данных

• DbDataReader – абстрактный базовый класс для объектов чтения данных;

• DbParameter – абстрактный базовый класс для объектов параметров;

• DbTransaction – абстрактный базовый класс для объектов транзакции.

Кроме того, в .NET 2.0 каждый поставщик данных от Microsoft предлагает специальный класс, получающийся из System.Data.Common.DbProviderFactory. Этот базовый класс определяет ряд методов, с помощью которых извлекаются объекты данных, специфичные для данного поставщика. Вот список соответствующих членов DbProviderFactory.

public abstract class DbProviderFactory {

 …

 public virtual DbCommand CreateCommand();

 public virtual DbCommandBuilder CreateCommandBuilder();

 public virtual DbConnection CreateConnection();

 public virtual DbConnectionStringBuilder CreateConnectionStringBuilder();

 public virtual DbDataAdapter CreateDataAdapter();

 public virtual DbDataSourceEnumerator CreateDataSourceEnumeration();

 public virtual DbParameter CreateParameter();

}

Для получения типа, производного от DbProviderFactorу и подходящего для вашего поставщика данных, пространство имен System.Data.Common предлагает тип класса DbProviderFactories. Используя статический метод GetFactory(), можно получить конкретный (и, кстати, уникальный) DbProviderFactory для указанного вами поставщика данных, например:

static void Main(string[] args) {

 // Получение источника поставщика данных SQL.

 DbProviderFactory sqlFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");

 …

 // Получение источника поставщика данных Oracle.

 DbProviderFactory oracleFactory = DbProviderFactories.GetFactory("System.Data.OracleClient");

 …

}

Как вы, наверное, и подумали, вместо получения источника с помощью "жестко" закодированной буквальной строки, соответствующую информацию можно прочитать из файла. *.config клиента (аналогично тому, как это было сделано в предыдущем примере MyConnectionFactory). Чуть позже мы с вами так и сделаем. Но, так или иначе, создав источник своего поставщика данных, вы сможете получить объекты (соединения, команды и т.д.), соответствующие этому поставщику данных.

Зарегистрированные источники поставщиков данных

Перед тем как мы с вами рассмотрим вполне законченный пример использования источника поставщика данных ADO.NET, важно обратить внимание на то, что тип DbProviderFactories (в .NET 2.0) позволяет выбрать источники только некоторого подмножества всех возможных поставщиков данных. Список действительных источников поставщиков данных указывается в рамках элемента ‹DbProviderFactories› в файле machine.config вашей инсталляции .NET2.0 (заметим, что значение атрибута invariant идентично значению, передаваемому методу DbProviderFactories.GetFactory()).

‹system.data›

 ‹DbProviderFactories›

  ‹add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /›