Модель источника поставщика данных .NET 2.0
Модель источника поставщика данных .NET 2.0
В .NET 2,0 предлагается модель источника поставщика данных, с помощью которой, используя обобщенные типы, можно построить единый базовый код для доступа к данным. Более того, используя файлы конфигурации приложения (в частности, их новый раздел ‹connectionStrings›), можно получать строки поставщиков и соединений декларативно, без необходимости перекомпиляции и повторной инсталляции программного обеспечения клиента.
Чтобы разобраться в реализации источника поставщика данных, вспомните из табл. 22.1, что все объекты поставщика данных получаются из одних и тех же базовых классов, определенных в пространстве имен System.Data.Common:
• 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). Чуть позже мы с вами так и сделаем. Но, так или иначе, создав источник своего поставщика данных, вы сможете получить объекты (соединения, команды и т.д.), соответствующие этому поставщику данных.