Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция4.doc
Скачиваний:
23
Добавлен:
01.05.2025
Размер:
212.99 Кб
Скачать

Сравнение DataReader и DataSet:

Свойство

DataReader

DataSet

Количество таблиц

Одна таблица

Множество таблиц

Отношения

Основано на присоединении

Включает в себя отношения

Перемещение по данным

Перемещение строка за строкой

Переход через

отношения

Соединение данных

Подключен или

отключен

Отключен

Передача данных

Сортировка COM

Передача XML-файла

Создание SqlDataReader: Объекты чтения данных получаются из объекта команды с помощью вызова метода ExecuteReader(). После того как вызван метод ExecuteReader объекта Command, вы получаете доступ к записи в DataReader путем вызова метода Read. По умолчанию позиционирование в DataReader устанавливается перед первой записью, поэтому вы должны вызвать Read перед доступом к любым данным. Когда ни одна запись не доступна, метод Read возвращает нулевое значение (false).

Чтение данных из DataReader:

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

string customerID = myReader["CustomerID"].ToString();

string companyName = myReader["CompanyName"].ToString();

Цикл по всем записям: Для перебора и вывода на консоль всех записей в DataReader, вы можете использовать цикл while, как показано в следующем примере кода:

while (myReader.Read())

{

Console.Write(myReader["CustomerID"].ToString() +" ");

Console.WriteLine(myReader["CompanyName"].ToString());

}

///////// Получение объекта чтения данных из объекта команды:

SqlDataReader myReader = mycommand.ExecuteReader();

//////// Цикл по результирующему набору: /////

while (myReader.Read())

{

Console.WriteLine("Фамилия {0},Отчество {1}, Имя {2}", myReader["Фамилия"].ToString().Trim(),

myReader["Отчество"].ToString().Trim(), myReader["Имя"].ToString().Trim());

}

/// Закрытие объекта чтения данных и соединения: /////

if (myReader != null)

myReader.Close();

if (cn.State == ConnectionState.Open)

cn.Close();

Закрытие DataReader. Когда DataReader используется, связи заняты обслуживанием DataReader. Таким образом, нужно всегда вызывать команду Close()(Закрыть), чтобы закрыть DataReader по окончании работы с ним:

if (myReader != null)

myReader.Close();

if (cn.State == ConnectionState.Open)

cn.Close();

Обработка ошибок с помощью DataReader. При использовании соединения с объектом DataReader, всегда нужно использовать блоки try / catch/ finally, чтобы убедиться, что если что-нибудь случится, соединения будут закрыты:

SqlDataReader myReader = null;

try

{

myReader = mycommand.ExecuteReader();

//////// Цикл по результирующему набору: /////

while (myReader.Read())

{

Console.WriteLine("Фамилия {0},Отчество {1}, Имя {2}", myReader["Фамилия"].ToString().Trim(),

myReader["Отчество"].ToString().Trim(), myReader["Имя"].ToString().Trim());

}

}

catch(Exception e)

{

Console.WriteLine(e.ToString());

}

finally

{

if (myReader != null)

myReader.Close();

if (cn.State == ConnectionState.Open)

cn.Close();

Console.WriteLine("Состояние соединения " + cn.State.ToString());

}

Чтение полей из текущей записи. Чтобы получить данные из полей в текущей записи, следует вызвать соответствующий метод Get класса SqlDataReader, например, GetName(i) – имя i-го столбца, GetValue(i) – значение i-го столбца, GetDateTime, GetDouble, GetInt32, или GetString. Параметр метода Get – это порядковый номер поля (столбца записи), которое вы хотите считать. Например, следующий код считывает поля CustomerID и CompanyName, из текущей записи DataReader, с помощью метода GetString:

string customerID = myReader.GetString(0);

string companyName = myReader.GetString(1);