Иллюстрированный самоучитель по Architecture .NET

DataReader. Множественное результирующее множество.

При его создании SqlDataReader не указывает ни на какую запись возвращенного набора данных. Поэтому для получения доступа к данным следует вызвать метод Read (Читать). Как показано в примере Connected, для получения доступа к отдельным полям или столбцам текущей строки можно использовать свойство Item (Элемент). Получить все поля строки можно также с помощью метода GetValues.

Object * fields [] = new Object *[NumberFields]; // новый Объект
int NumberFields = reader › GetValues(fields); // читать поля

GetValue возвращает значение столбца в его исходном формате Для доступа к данным определенных форматов можно использовать методы GetBoolean (Прочитать Логическое значение), GetDecimal (Прочитать Десятичное число) и GetString (Прочитать Строку). Метод GetName возвращает имя определенного столбца.

Еще раз повторим, что при использовании DataReader в каждый момент времени доступна только одна запись. Убедитесь в том, что по завершении работы с DataReader вы его закрыли.

Множественное результирующее множество

Класс SqlDataReader может хранить несколько результирующих множеств, что продемонстрировано в примере DataReader. Два запроса, разделенные точкой с запятой, являются двумя SQL-запросами, которые приводят к возврату двух результирующих множеств, по одному на каждый запрос.

String *ConnString = // Строка
"server=localhost;uid=sa;pwd=;
database=Northwind";
String *cmd = // Строка
"select Customerld,
CompanyName from Customers where
// выбрать Customerld,
CompanyName из Клиентов где
Customerld like 'T%'/select Customerld, CompanyName…"
// Customerld подобно "I % '; выбрать Customerld, CompanyName …
int ResultSetCounter = -1; int NumberFields = 0;
reader = command › ExecuteReader(); // команда
if (reader!= 0)
{
NumberFields = reader › FieldCount;
Object *fields[] = new Object*[NumberFields]; // новый
// Объект Console::WriteLine (
"Result Set\tCustomerId\tCompanyName");
// "Результат Set\tCustomerId\tCompanyName");
do
{
ResultSetCounter++;
while(reader › Read() == true) // пока Чтение ()
// == истина {
NumberFields =
reader › GetValues(fields); // поля Console::Write(" { 0 } ",
ResultSetCounter.ToStringt)); for (int i = 0; i<NumberFields; i++)
{
Console::Write(
"\t\t{0}", fields[i]); // поля
Console::Write("\n"); // Запись
};
}
while(reader › NextResult() == true); // пока NextResult ()
// == истина
}

Метод FieldCount возвращает количество столбцов в результирующем множестве. Поскольку метод GetValues возвращает данные в их исходном формате, в качестве аргументов ему передается массив объектов. Метод NextResult обеспечивает перемещение к следующему результирующему множеству.

Результатом работы программы DataReader будет вывод на экран следующих строк:

Result Set Customerld 'CompanyName
0 THEBI The Big Cheese
0 THECR The Cracker Box
0 TOMSP Toms Spezialitaten
0 TORTU Tortuga Restaurante
0 TRADH Tradigao Hipermercados
0 TRAIH Trail's Head Gourmet
Provisioners
1 WANDK Die Wandernde Kuh
1 WARTH Wartian Herkku
1 WELLI Wellington Importadora
1 WHITC White Clover Markets
1 WILMK Wilman Kala
1 WOLZA Wolski Zajazd
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.