ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Шрифт:
Исходный код. Проект MyConnectionFactory размещен в подкаталоге, соответствующем главе 22.
Модель источника поставщика данных .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.
Для получения типа, производного от DbProviderFactorу и подходящего для вашего поставщика данных, пространство имен System.Data.Common предлагает тип класса DbProviderFactories. Используя статический метод GetFactory, можно получить конкретный (и, кстати, уникальный) DbProviderFactory для указанного вами поставщика данных, например:
Как вы, наверное, и подумали, вместо получения источника с помощью "жестко"
Зарегистрированные источники поставщиков данных
Перед тем как мы с вами рассмотрим вполне законченный пример использования источника поставщика данных ADO.NET, важно обратить внимание на то, что тип DbProviderFactories (в .NET 2.0) позволяет выбрать источники только некоторого подмножества всех возможных поставщиков данных. Список действительных источников поставщиков данных указывается в рамках элемента ‹DbProviderFactories› в файле machine.config вашей инсталляции .NET2.0 (заметим, что значение атрибута invariant идентично значению, передаваемому методу DbProviderFactories.GetFactory).
Замечание. Если вы хотите использовать модель источника поставщика данных для СУБД, не упомянутой в файле machine.config, то знайте, что подобная модель для множества поставщиков данных, как с открытым программным кодом, так и коммерческих, предлагается дистрибутивом Mono.NET (см. главу 1).
Рабочий пример источника поставщика данных
Давайте построим консольное приложение (с именем DataProviderFactory), которое будет печатать имена и фамилии авторов из таблицы Authors базы данных Pubs, создаваемой при установке Microsoft SQL Server (Pubs представляет собой пример базы данных вымышленной издательской компании).