Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Объекты чтения данных удобны, если нужно быстро пройти по большому объему данных без необходимости иметь их представление в памяти. Например, в случае запрашивания 20 000 записей из таблицы с целью их сохранения в текстовом файле помещение такой информации в объект
DataSet
DataSet
Более эффективный подход предусматривает создание объекта чтения данных, который максимально быстро проходит по всем записям. Тем не менее, имейте в виду, что объекты чтения данных (в отличие от объектов адаптеров данных, которые рассматриваются позже) удерживают подключение к источнику данных открытым до тех пор, пока вы его явно не закроете.
Объекты чтения данных получаются из объекта команды с применением вызова
ExecuteReader()
[]
В приведенном ниже примере использования объекта чтения данных задействован метод
Read()
false
Close()
...
// Получить объект чтения данных посредством ExecuteReader().
using(SqlDataReader myDataReader = myCommand.ExecuteReader())
{
// Пройти в цикле по результатам.
while (myDataReader.Read())
{
WriteLine($"-> Make: { myDataReader["Make"]},
PetName: { myDataReader["PetName"]},
Color: { myDataReader["Color"]}.");
}
}
ReadLine();
Индексатор объекта чтения данных перегружен для приема либо значения
string
int
FieldCount
while (myDataReader.Read())
{
for (int i = 0; i < myDataReader.FieldCount; i++)
{
Console.Write(i != myDataReader.FieldCount - 1
? $"{myDataReader.GetName(i)} = {myDataReader.GetValue(i)}, "
: $"{myDataReader.GetName(i)} = {myDataReader.GetValue(i)} ");
}
Console.WriteLine();
}
Если в настоящий момент скомпилировать проект и запустить его на выполнение, то должен отобразиться список всех автомобилей из таблицы Inventory базы данных
AutoLot
***** Fun with Data Readers *****
***** Info about your connection *****
Database location: .,5433
Database name: AutoLot
Timeout: 30
Connection state: Open
id = 1, Make = VW, Color = Black, Petname = Zippy
id = 2, Make = Ford, Color = Rust, Petname = Rusty
id = 3, Make = Saab, Color = Black, Petname = Mel
id = 4, Make = Yugo, Color = Yellow, Petname = Clunker
id = 5, Make = BMW, Color = Black, Petname = Bimmer
id = 6, Make = BMW, Color = Green, Petname = Hank
id = 7, Make = BMW, Color = Pink, Petname = Pinky
id = 8, Make = Pinto, Color = Black, Petname = Pete
id = 9, Make = Yugo, Color = Brown, Petname = Brownie
Получение множества результирующих наборов с использованием объекта чтения данных
Объекты чтения данных могут получать несколько результирующих наборов с применением одиночного объекта команды. Например, если вы хотите получить все строки из таблицы
Inventory
Customers
Select
sql += ";Select * from Customers;";
На заметку! Точка с запятой в начале строки опечаткой не является. В случае использования множества операторов они должны разделяться точками с запятой. И поскольку начальный оператор не содержал точку с запятой, она добавлена здесь в начало второго оператора.
После получения объекта чтения данных можно выполнить проход по каждому результирующему набору, используя метод
NextResult()
do
{
while (myDataReader.Read())
{
for (int i = 0; i < myDataReader.FieldCount; i++)
{
Console.Write(i != myDataReader.FieldCount - 1
? $"{myDataReader.GetName(i)} = {myDataReader.GetValue(i)}, "