Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
namespace MyConnectionFactory{ // Пакет OleDb предназначен только для Windows и в .NET Core не поддерживается. enum DataProviderEnum { SqlServer,#if PC OleDb,#endif Odbc, None }}Если на своей машине обработки вы работаете в среде Windows, тогда модифицируйте файл проекта, чтобы определить символ условной компиляции PC:
<PropertyGroup> <DefineConstants>PC</DefineConstants></PropertyGroup>В случае использования Visual Studio щелкните правой кнопкой мыши на имени проекта и выберите в контекстном меню пункт Properties (Свойства). В открывшемся диалоговом окне Properties (Свойства) перейдите на вкладку Build (Сборка) и введите нужное значение в поле Conditional compiler symbols (Символы условной компиляции).
Следующий пример кода позволяет выбирать специфический объект подключения на основе значения из специального перечисления. В целях диагностики мы просто выводим лежащий в основе объект подключения с применением служб рефлексии.
using System;using System.Data;using System.Data.Odbc;#if PC using System.Data.OleDb;#endifusing Microsoft.Data.SqlClient;using MyConnectionFactory;Console.WriteLine("**** Very Simple Connection Factory *****n");Setup(DataProviderEnum.SqlServer);#if PC Setup(DataProviderEnum.OleDb); // He поддерживается в macOS#endifSetup(DataProviderEnum.Odbc);Setup(DataProviderEnum.None);Console.ReadLine();void Setup(DataProviderEnum provider){ // Получить конкретное подключение. IDbConnection myConnection = GetConnection(provider); Console.WriteLine($"Your connection is a {myConnection?.GetType().Name ?? "unrecognized type"}"); // Открыть, использовать и закрыть подключение...}// Этот метод возвращает конкретный объект подключения// на основе значения перечисления DataProvider.IDbConnection GetConnection(DataProviderEnum dataProvider) => dataProvider switch { DataProviderEnum.SqlServer => new SqlConnection(),#if PC // He поддерживается в macOS DataProviderEnum.OleDb => new OleDbConnection(),#endif DataProviderEnum.Odbc => new OdbcConnection(), _ => null, };Преимущество работы с общими интерфейсами из пространства имен
System.DataSystem.Data.CommonSystem.Data.SqlClientК настоящему моменту вы написали (довольно простой) код ADO.NET, который позволяет создавать различные типы объектов подключений, специфичные для поставщика. Тем не менее, получение объекта подключения — лишь один аспект работы с ADO.NET. Чтобы построить полезную библиотеку фабрики поставщиков данных, необходимо также учитывать объекты команд, объекты чтения данных, адаптеры данных, объекты транзакций и другие типы, связанные с данными. Создание подобной библиотеки кода не обязательно будет трудным, но все-таки потребует написания значительного объема кода и затрат времени.
Начиная с версии .NET 2.0, такая функциональность встроена прямо в библиотеки базовых классов .NET. В .NET Core эта функциональность была значительно обновлена.
Вскоре мы исследуем упомянутый формальный API-интерфейс, но сначала понадобится создать специальную базу данных для применения в настоящей главе (и во многих последующих главах).
Установка SQL Server и Azure Data Studio
На протяжении оставшегося материала главы мы будем выполнять запросы в отношении простой тестовой базы данных SQL Server по имени
AutoLotAutoLotInventoryMakesOrdersCustomersCreditRisks