</appSettings>
  ...
</configuration>

А вот так выглядит код, связанный с фабрикой:

// Получить фабрику.
string factory = WebConfigurationManager.AppSettings["factory"];
DbProviderFactory provider = DbProviderFactories.GetFactory(factory);
// Использовать фабрику для получения соединения.
DbConnection con = provider.CreateConnection();
con.ConnectionString =
  WebConfigurationManager.ConnectioinSttings["Northvind"].ConnectionString;
// Создать команду.
DbCommand cmd = provider.CreateCommand();
cmd.CommandText = WebConfigurationManager.AppSettings["employeeQuery"];
cmd.Connection = con;
// Открытъ Connection и получить DataReader.
con.Open();
DbDataReader reader = cmd.ExecuteReader();
// Код для навигации и отображения записей
// идентичен использованному ранее.

Чтобы протестировать этот пример, попробуйте модифицировать файл web.config для использования другого провайдера. Например, вы можете обратиться к той же базе данных через провайдер OLE DB, внеся следующее изменение:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
  <add name="Northwind" connectionString="Provider=SQLOLEDB;Data Source=
    localhost;Initial Catalog=Northwind;Integrated Security=SSPI"/>
</connectionStrings>
...
</configuration>

Теперь, когда вы запустите страницу, то увидите тот же список записей. Разница в том, теперь класс DbDataFactories создает объекты OLE DB для работы с вашим кодом.

На заметку! Однако проблемы, связанные с независимым от провайдером кодом, решены не до конца. Даже при использовании фабрик провайдеров остаются некоторые сложности. Например, не существует обобщенного способа перехватывать объекты исключений базы данных (потому что разные специфичные для провайдера объекты исключений не наследуются от общего базового класса). К тому же разные провайдеры могут следовать несколько отличающимся соглашениям относительно имен параметров, и могут поддерживать специализированные средства, недоступные для общих базовых классов (в таком случае приходится писать сложную условную логику).

предыдущая    следующая страница   оглавление

335

Hosted by uCoz