- •Лекция 4 «Работа с бд Microsoft sql Server без разрыва соединения (связный уровень ado.Net)»
- •1. Создание соединения с источником данных
- •Конструкторы
- •Свойства
- •События
- •2. Работа с базой данных с помощью sql-запросов. Выборка, добавление, удаление и обновление данных
- •Конструкторы
- •Свойства
- •Сравнение DataReader и DataSet:
- •Чтение данных из DataReader:
- •Цикл по всем записям: Для перебора и вывода на консоль всех записей в DataReader, вы можете использовать цикл while, как показано в следующем примере кода:
- •Использование DataSets и DataReaders:
- •4. Отображение информации из базы данных с помощью элементов управления ListBox, ComboBox, ListView, DataGridView, DataTable.
Сравнение 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);
