Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

*****

Your connection object is a: SqlConnection

Your command object is a: SqlCommand

Your data reader object is a: SqlDataReader

*****

Current Inventory

*****

– > Car #1 is a VW.

– > Car #2 is a Ford.

– > Car #3 is a Saab.

– > Car #4 is a Yugo.

– > Car #9 is a Yugo.

– > Car #5 is a BMW.

– > Car #6 is a BMW.

– > Car #7 is a BMW.

– > Car #8 is a Pinto.

Измените

файл настроек, чтобы указать другого поставщика. Код выберет связанную строку подключения и произведет тот же вывод, что и ранее, исключая специфичную для типа информацию.

Конечно, в зависимости от опыта работы с ADO.NET у вас может не быть полного понимания того, что в действительности делают объекты подключений, команд и чтения данных. Не вдаваясь в детали, пока просто запомните, что модель фабрики поставщиков данных ADO.NET позволяет строить единственную кодовую базу, которая способна потреблять разнообразные поставщики данных в декларативной манере.

Потенциальный недостаток модели фабрики поставщиков данных

Хотя модель фабрики поставщиков данных характеризуется высокой мощностью, вы должны обеспечить применение в кодовой базе только типов и методов, общих для всех поставщиков, посредством членов абстрактных базовых классов. Следовательно, при разработке кодовой базы вы ограничены членами

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;

Работа с объектами подключений

При работе с поставщиком данных первым делом понадобится установить сеанс с источником данных, используя объект подключения (производного от

DbConnection
типа). Объекты подключений .NET Core обеспечиваются форматированной строкой подключения, которая содержит несколько пар "имя-значение", разделенных точками с запятой. Такая информация идентифицирует имя машины, к которой нужно подключиться, требуемые настройки безопасности, имя базы данных на машине и другие специфичные для поставщика сведения.

Поделиться с друзьями: