Язык программирования C#9 и платформа .NET5
Часть 388 из 642 Информация о книге
•
— абстрактный базовый класс для всех классов команд;DbCommand•
— абстрактный базовый класс для всех классов подключений;DbConnection•
— абстрактный базовый класс для всех классов адаптеров данных;DbDataAdapter•
— абстрактный базовый класс для всех классов чтения данных;DbDataReader•
— абстрактный базовый класс для всех классов параметров;DbParameter•
— абстрактный базовый класс для всех классов транзакций.DbTransactionКаждый поставщик данных, совместимый с .NET Core, содержит класс, производный от
. В этом базовом классе определено несколько методов, которые извлекают объекты данных, специфичные для поставщика. Вот члены классаSystem.Data.Common.DbProviderFactory:DbProviderFactorypublic abstract class DbProviderFactory{public virtual bool CanCreateDataAdapter { get;};public virtual bool CanCreateCommandBuilder { get;};public virtual DbCommand CreateCommand();public virtual DbCommandBuilder CreateCommandBuilder();public virtual DbConnection CreateConnection();public virtual DbConnectionStringBuilder CreateConnectionStringBuilder();public virtual DbDataAdapter CreateDataAdapter();public virtual DbParameter CreateParameter();public virtual DbDataSourceEnumerator CreateDataSourceEnumerator();}Чтобы получить производный от
тип для вашего поставщика данных, каждый поставщик предоставляет статическое свойство, используемое для возвращения корректного типа. Для возвращения версии SQL Server поставщикаDbProviderFactoryприменяйте следующий код:DbProviderFactory// Получить фабрику для поставщика данных SQL.DbProviderFactory sqlFactory =Microsoft.Data.SqlClient.SqlClientFactory.Instance;Чтобы сделать программу более универсальной, вы можете создать фабрику
, которая возвращает конкретную разновидностьDbProviderFactoryна основе настройки в файлеDbProviderFactoryдля приложения. Вскоре вы узнаете, как это делать, а пока после получения фабрики для поставщика данных можно получить связанные с ним объекты данных (например, объекты подключений, команд и чтения данных).appsettings.jsonПолный пример фабрики поставщиков данных
В качестве завершенного примера создайте новый проект консольного приложения C# (по имени
), которое выводит инвентарный список автомобилей из базы данныхDataProviderFactory. В начальном примере логика доступа к данным будет жестко закодирована прямо в сборкеAutoLot(чтобы излишне не усложнять код). По мере изучения материалов настоящей главы вы узнаете более эффективные способы решения задачи.DataProviderFactory.exeНачните с добавления нового элемента
и пакетовItemGroup,Microsoft.Extensions.Configuration.Json,System.Data.Common,System.Data.OdbcиSystem.Data.OleDbв файл проекта:Microsoft.Data.SqlClientdotnet add DataProviderFactory package Microsoft.Data.SqlClientdotnet add DataProviderFactory package System.Data.Commondotnet add DataProviderFactory package System.Data.Odbcdotnet add DataProviderFactory package System.Data.OleDbdotnet add DataProviderFactory package Microsoft.Extensions.Configuration.JsonОпределите символ условной компиляции PC (в случае применения Windows):
<PropertyGroup><DefineConstants>PC</DefineConstants></PropertyGroup>Далее добавьте новый файл по имени
и модифицируйте его код, как показано ниже:DataProviderEnum.csnamespace DataProviderFactory{// OleDb поддерживается только в Windows, но не в .NET Core.enum DataProviderEnum{SqlServer,#if PCOleDb,#endifOdbc}}Добавьте в проект новый файл JSON по имени
и измените его содержимое следующим образом (обновите строки подключения в соответствии с имеющейся средой):appsettings.json{"ProviderName": "SqlServer",//"ProviderName": "OleDb",//"ProviderName": "Odbc","SqlServer": {// Для localdb используйте @"Data Source=(localdb)\// mssqllocaldb;Integrated Security=true;Initial Catalog=AutoLot""ConnectionString": "Data Source=.,5433;User Id=sa;Password=P@ssw0rd;InitialCatalog=AutoLot"},"Odbc": {