Потенциальный недостаток модели фабрики поставщиков данных
Хотя модель фабрики поставщиков данных характеризуется высокой мощностью, вы должны обеспечить применение в кодовой базе только типов и методов, общих для всех поставщиков, посредством членов абстрактных базовых классов. Следовательно, при разработке кодовой базы вы ограничены членами DbConnection
DbCommand и других типов из пространства имен System.Data.Common.С учетом сказанного вы можете прийти к заключению, что такой обобщенный подход предотвращает прямой доступ к дополнительным возможностям отдельной СУБД. Если вы должны быть в состоянии обращаться к специфическим членам лежащего в основе поставщика (например, SqlConnection
if (connection is SqlConnection sqlConnection)
{
// Вывести информацию об используемой версии SQL Server.
WriteLine(sqlConnection.ServerVersion);
}
Однако в таком случае кодовая база становится чуть труднее в сопровождении (и менее гибкой), потому что придется добавить некоторое количество проверок времени выполнения. Тем не менее, если необходимо строить библиотеки доступа к данным наиболее гибким способом из числа возможных, тогда модель фабрики поставщиков данных предлагает замечательный механизм для решения такой задачи.
На заметку!
Инфраструктура Entity Framework Core и ее поддержка внедрения зависимостей значительно упрощает построение библиотек доступа к данным, которым необходим доступ к разрозненным источникам данных.Первый пример завершен, и теперь можно углубляться в детали работы с ADO.NET.
Погружение в детали объектов подключений, команд и чтения данных
Как было показано в предыдущем примере, ADO.NET позволяет взаимодействовать с базой данных с помощью объектов подключения, команд и чтения данных имеющегося поставщика данных. Для более глубокого понимания упомянутых объектов в ADO.NET будет создан расширенный пример.
В предыдущем примере демонстрировалось, что для подключения к базе данных и чтения записей посредством объекта чтения данных, необходимо было выполнить следующие шаги.
1. Создать, сконфигурировать и открыть объект подключения.
2. Создать и сконфигурировать объект команды, указав объект подключения в аргументе конструктора или через свойство Connection
3. Вызвать метод ExecuteReader
4. Обработать каждую запись с применением метода Read
Для начала создайте новый проект консольного приложения по имени AutoLot.DataReader
Microsoft.Data.SqlClient. Ниже приведен полный код внутри Program.cs (с последующим анализом):using System;
using Microsoft.Data.SqlClient;
Console.WriteLine("***** Fun with Data Readers *****\n");
// Создать и открыть подключение.
using (SqlConnection connection = new SqlConnection)
{
connection.ConnectionString =
@" Data Source=.,5433;User Id=sa;Password=P@ssw0rd;Initial Catalog=AutoLot";
connection.Open;
// Создать объект команды SQL.
string sql =
@"Select i.id, m.Name as Make, i.Color, i.Petname
FROM Inventory i
INNER JOIN Makes m on m.Id = i.MakeId";
SqlCommand myCommand = new SqlCommand(sql, connection);
// Получить объект чтения данных с помощью ExecuteReader.
using (SqlDataReader myDataReader = myCommand.ExecuteReader)
{
// Пройти в цикле по результатам.
while (myDataReader.Read)
{
Console.WriteLine($"-> Make: {myDataReader["Make"]},
PetName: {myDataReader
["PetName"]}, Color: {myDataReader["Color"]}.");
}
}
}
Console.ReadLine;
Работа с объектами подключений
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT