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
