3. Вызвать метод
ExecuteReader()
на сконфигурированном объекте команды.
4. Обработать каждую запись с применением метода
Read()
объекта чтения данных.
Для начала создайте новый проект консольного приложения по имени
AutoLot.DataReader
и добавьте пакет
Microsoft.Data.SqlClient
. Ниже приведен полный код внутри
Program.cs
(с последующим анализом):
using System;
using Microsoft.Data.SqlClient;
Console.WriteLine("***** Fun with Data Readers *****\n");
<b>// Создать и открыть подключение.</b>
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 обеспечиваются форматированной
строкой подключения, которая содержит несколько пар "имя-значение", разделенных точками с запятой. Такая информация идентифицирует имя машины, к которой нужно подключиться, требуемые настройки безопасности, имя базы данных на машине и другие специфичные для поставщика сведения.
Из приведенного выше кода можно сделать вывод, что имя
Initial Catalog
относится к базе данных, с которой необходимо установить сеанс. Имя
Data Source
идентифицирует имя машины, где находится база данных. Здесь применяется строка
"., 5433"
, которая ссылается на хост-машину (точка соответствует
localhost
), и порт 5433, который представляет собой порт контейнера Docker, отображенный на порт SQL Server. Если бы вы использовали другой экземпляр, то определили бы свойство как
имя_машины,порт\экземпляр
. Например,
MYSERVER\SQLSERVER2019
означает, что
MYSERVER
— имя сервера, на котором функционирует SQL Server, что применяется стандартный порт и что
SQLSERVER2019
представляет собой имя экземпляра. Если машина является локальной по отношению к разработке, тогда можете использовать для имени сервера точку (
.
) или маркер (
localhost
). В случае стандартного экземпляра SQL Server имя экземпляра не указывается. Скажем, если вы создаете базу данных
AutoLot
в установленной копии Microsoft SQL Server, настроенной как стандартный экземпляр на вашем локальном компьютере, то могли бы применять
"Data Source=localhost"
.
Кроме того, можно указать любое количество конструкций, которые представляют учетные данные безопасности. Если
Integrated Security
установлено в
true
, то для аутентификации и авторизации используется текущая учетная запись Windows.
Когда строка подключения готова, можно вызывать метод
Open()
для установления подключения к базе данных. В дополнение к членам
Connectionstring
,
Open()
и
Close()
объект подключения предоставляет несколько членов, которые позволяют конфигурировать дополнительные настройки подключения, такие как таймаут и транзакционная информация. В табл. 21.4 кратко описаны избранные члены базового класса
DbConnection
.
Свойства типа
DbConnection
обычно по своей природе допускают только чтение и полезны, только если требуется получить характеристики подключения во время выполнения. Когда необходимо переопределить стандартные настройки, придется изменить саму строку подключения. Например, в следующей строке подключения время таймаута
Connect Timeout
устанавливается равным 30 секундам вместо стандартных 15 секунд (для SQL Server):
using(SqlConnection connection = new SqlConnection())
{
connection.ConnectionString =
@" Data Source=.,5433;User Id=sa;Password=P@ssw0rd;
Initial Catalog=AutoLot;Connect
Timeout=30";
connection.Open();
}
Следующий код выводит детали о переданной ему строке подключения
SqlConnection
:
static void ShowConnectionStatus(SqlConnection connection)
{
// Вывести различные сведения о текущем объекте подключения.