‹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" /›
‹add name="OleDb Data Provider" invariant=" System.Data.OleDb"description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /›
‹add name="OracleClient Data Provider" invariant= "System.Data.OracleClient"description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /›
‹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›
Замечание.Если вы хотите использовать модель источника поставщика данных для СУБД, не упомянутой в файле machine.config, то знайте, что подобная модель для множества поставщиков данных, как с открытым программным кодом, так и коммерческих, предлагается дистрибутивом Mono.NET (см. главу 1).
Рабочий пример источника поставщика данных
Давайте построим консольное приложение (с именем DataProviderFactory), которое будет печатать имена и фамилии авторов из таблицы Authors базы данных Pubs, создаваемой при установке Microsoft SQL Server (Pubs представляет собой пример базы данных вымышленной издательской компании).
Сначала укажите ссылку на компоновочный блок System.Configuration.dll, добавьте в текущий проект файл арр.config и определите элемент ‹appSettings›. Помните о том, что "официальным" форматом значения поставщика является полное имя пространства имен поставщика данных, а не такое фиктивное имя, как то, которое использовалось выше в примере MyConnectionFactory.
‹configuration›
‹appSettings ›
‹!-- Какой поставщик? --›
‹add key="provider'' value="System.Data.SqlClient" /›
‹!-- Какая строка соединения? --›
‹add key="cnStr" value="Data Source=localhost;uid=sa;pwd=;Initial Catalog=Pubs"/›
‹/appSettings›
‹/configuration›
Теперь, когда у вас есть соответствующий файл *.config, вы можете прочитать из него значения provider и cnStr, используя метод ConfigurationManager.AppSettings(). Значение provider будет передано методу DbProviderFactories.GetFactory(), чтобы получить специфичный для данного поставщика тип источника данных. Значение cnStr будет использоваться для установки свойства ConnectionString типа DbConnection. В предположении о том, что вы: указали using для пространств имен System.Data и System.Data.Common, обновите метод Main() так, как показано ниже.
static void Main(string[] args) {
Console.WriteLine("*** Источники поставщиков данных ***\n");
// Получение строк соединения и поставщика данных из файла *.config.
string dp = ConfigurationManager.AppSettings("provider");
string cnStr = ConfigurationManager.AppSettings("cnStr");
// Создание источника поставщика.
DbProviderFactory df = DbProviderFactories.GetFactory(dp);
// Создание объекта соединения.
DbConnection cn = df.CreateConnection();
Console.WriteLine("Объект соединения: {0}", cn.GetType().FullName);
cn.ConnectionString = cnStr;
cn.Open();
// Coздание объекта команды.
DbCommand cmd = df.CreateCommand();
Console.WriteLine("Объект команды: {0}", cmd.GetType().FullName);
cmd.Connection = cn;
cmd.CommandText = "Select * From Authors";
// Вывод данных с помощью объекта чтения данных.
DbDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
Console.WriteLine("Объект чтения данных: {0}", dr.GetType().FullName);
Console.WriteLine("\n***** Авторы в Pubs *****");
while(dr.Read()) Console.WriteLine("-› {0}, {1}", dr["au_lname"], dr["au_fname"]);
dr.Close();
}
Здесь для проверки печатаются полные имена объекта соединения, объекта команды и объекта чтения данных. Запустив это приложение, вы обнаружите, что для чтения данных из таблицы Authors базы данных Pubs был использован поставщик Microsoft SQL Server (рис. 22.2).
Рис. 22.2. Получение поставщика данных SQL Server с помощью источника поставщика данных .NET 2.0
Далее, если вы измените файл *.config так, чтобы в нем для поставщика данных было указано System.Data.OleDb (и соответственно обновите строку соединения), как предлагается ниже:
‹configuration›
‹appSettings›
‹!-- Which provider? --›
‹add key="provider" value="System.Data.OleDb"/›
‹!-- Which connection string? --›
‹add key="cnStr" value="Provider= SQLOLEDB;Data Source=localhost;uid=sa;pwd=;Initial Catalog=Pubs" / ›
‹/appSettings›
‹/configuration›
то вы обнаружите, что теперь в фоновом режиме используются типы System.Data. OleDb (рис. 22.3).
Читать дальше