
- •Основные понятия и терминология бд.
- •2. Логическое и физическое описание данных.
- •4. Классификация субд. Трехуровневая архитектура бд.
- •5. Эволюция концепций бд. Основные характеристики первого и второго этапов.
- •11. Реляционная модель бд. Транзакции, триггеры и хранимые процедуры, ссылочная целостность на триггерах.
- •17. Физическая организация данных в субд:
- •18.Физическая организация данных в субд: индексирование. Организация индексов в виде б-деревьев и инвертированных списков.
- •19. Распределенные бд. Хранилища данных.
- •20. Sql. Состав операторов языка.
- •21. Структурированный язык запросов (sql). Оператор select и вычисления.
- •22. Структурированный язык запросов (sql). Вложенные и многотабличные запросы.
- •23.Структурированный язык запросов (sql). Операторы манипулирования данными.
- •24.Подходы разработки программного обеспечения под ос Windows. Достоинства и недостатки.
- •25.Платформа .Net Framework. Достоинства и недостатки.
- •26.Платформа .Net Framework. Архитектура: fcl, bcl, clr, cil, сборки.
- •27.Платформа .Net Framework. Классификация типов, базовые операции программирования: приведение типов, вызов методов, свойства.
- •28.Ado.Net. Архитектура. DataProvider и DataSet.
- •29.Ado.Net. Соединение с бд, строка подключения, Connection, Command. Основные свойства и методы.
- •30.Ado.Net. Выполнение команд и запросов к бд. Основные свойства и методы: CommandType, ExecuteNonQuery(), ExecuteScalar(), ExecuteReader().
- •31.Ado.Net. Параметризированные запросы. SqlParameter. Основные свойства и методы.
- •32.Ado.Net. Чтение данных и объект DataReader. Основные свойства и методы.
- •33. Ado.Net. Рассоединенный набор данных DataSet. Схема данных.
- •34. Ado.Net. Заполнение рассоединенного набора данных. Адаптер данных SqlDataAdapter. Основные свойства и методы.
- •35. Ado.Net. Класс DataColumn. Основные свойства и методы.
- •36. Ado.Net. Класс DataRow. Основные свойства и методы.
- •37. Ado.Net. Класс DataTable. Основные свойства и методы
- •38. Ado.Net. Задание схемы набора данных вручную (тип и имя отдельных столбцов таблицы, ограничения на столбцы и связи между таблицами).
- •39. Ado.Net. Навигация, поиск и фильтрация данных в DataSet. Основные свойства и методы. Типизированный набор данных.
- •41. Ado.Net. Синхронизация набора данных с бд. Основные свойства и методы. Класс CommandBuilder.
- •42. Схема взаимодействия между браузером и web-сервером. Понятие статических и динамических web-страниц. Особенности asp.Net.
- •43. Asp.Net. Компоненты web-приложения. Структура файла *.Aspx.
30.Ado.Net. Выполнение команд и запросов к бд. Основные свойства и методы: CommandType, ExecuteNonQuery(), ExecuteScalar(), ExecuteReader().
Для выполнения запросов любых типов в ADO.NET используются объекты класса command.
Для создания объекта command существует 2 способа:
использование конструктора. Класс SqlCommand использует несколько перегруженных конструкторов:
var cmd_1 = new SqlCommand();
var cmd_2 = new SqlCommand (“SELECT * FROM Albums”);
var con = new SqlConection();
var cmd_3 = new SqlCommand (“SELECT * FROM Artists”, con);
На основе объекта connection
Связь с соединением должна быть установлена для любой команды перед выполнением. В общем случае для этого используется свойство Connection
SqlConnection c = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cmd.connection = c;
Свойство Command.Type и Command.Text
Command.Text содержит текст программы.
Command.Type определяет как следует понимать этот текст. Оно может принимать значения:
CommandType.Text – для SQL – инструкций
CommandType.StoredProcedure тескт программы который содержит имя хранимой процедуры, которая находиться в БД
CommandType.TableDirect – для извлечения из БД полной таблицы.
Методы выполнения команд: За подготовкой команды следует её выполнение, до выполнения команда должна быть связана с соединением и соединение должно быть открыто
ExecuteNonQuery() применяется для запросов, не возвращающих данные. Этот метод возвращает суммарное число строк добавленных, изменённых или удалённых в результате выполнения команды. Если выполняется DDL запрос, то этот метод возвращает значение -1.
ExecuteScalar() может быть полезен при выполнении запросов или хранимых процедур, возвращающих единственный результат. Данный метод выполняет команду и возвращает 1 столбец 1 строки 1 результирующего набора данных.
ExecuteRader() выполняет команду и возвращает объект DbDataReader. Тип возвращаемого Reader’а соответствует поставщику. Данный метод используется когда требуется получить набор данных из базы.
Поставщик MS SQL Server поддерживает метод выполнения команды, возвращающий объект класса XmlReader
Это метод ExecuteXmlReader(). Метод поддерживается для SQL Server 2000 и более поздние версий требует, чтобы возвращаемые данные были в формате XML.
У поставщика SQL Server реализован ряд методов класса SqlCommand, позволяющие выполнять Асинхронные операции.
Например:
BeginExecuteNonQuery
BeginExecuteReader
BeginExecuteXmlReader
EndExecuteNonQuery
EndExecuteReader
EndExecuteXmlReader
Использование асинхронных команд полезно в тех случаях, когда необходимо выполнение нескольких операций или хранимых процедур.
//Запрашиваем у пользователя информацию…
Console.Write(“Input name to find the id: “);
cmd.Parameters[@”sp_name”].Value = Console.ReadLine();
// … и возвращаем ему результат
con.Open();
cmd.ExecuteNonQuery();
Console.WriteLine(cmd.Parameters[“@RetVal”].Value);
con.Close();
Чтение из БД – наиболее часто используемая операция. Для этого используется метод ExecuteReader возвращающий объект DataReader. Использование DataReader’а имеет следующие особенности:
Reader’ы не создаются при помощи вызова конструктора. Единственный способ создать Reader - выполнить метод ExecuteReader
Reader’ы позволяют перемещается по данным наборам строго последовательно в одном направлении. Большинство СУБД выполняют эту операцию достаточно быстро
Данные получаемые при помощи Reader’а доступны только для чтения
На время чтения данных соответствующее соединение с БД блокируется. Это означает что соединение не может быть использовано другими командами до тех пор, пока чтение данных не завершено.
Основным методом является Read, который перемещает указатель на следующую запись в наборе данных и возвращает false если записи в наборе больше нет
После прочтения всех записей у Reader’a необходимо выполнить метод Close(). Данный метод освобождает соединение, которое было занято Reader’ом
// стандартные подготовительные действия
var con = new SqlConnection {ConnectionString = “…”};
var cmd = new SqlCommand (“Select* FROM Songs”, con);
// открываем соединение и получаем ридер
con.Open();
var r = cmd.ExecuteReader();
// в цикле читаем данные (пока кода в цикле нет!)
while (r.Read()) {}
// закрываем ридер; если необходимо, закрываем соединение
r.Close();
con.Close()
;
Чтобы прочитать данные получаемы Reader’ом существует 2 возможности:
использование индексатора Reader’а. В качестве индекса выступает строка с именем столбца, возвращаемое значение имеет тип object поэтому выполняется операция приведения типов.
Поиск столбца по имени регистронезависим. Если нужного столбца в наборе данных нет, то генерируется исключение IndexOutOfRangeException.
Выполнение поиска столбца по имени требует сравнения строки происходит медленно.
используя в качестве индекса номера столбца. В этом случае производительность повышается:
В некоторых ситуациях известно только имя столбца, но его не порядковый номер.
Метод GetOrdinal() принимает строку представляющую имя столбца, и возвращает целое значение, соответствующее порядковому номеру столбца.
Это позволяет достичь компромисса между гибкостью и производительностью:
// Получаем ридер
SqlDataReader r = cmd.ExecuteReader();
// Один раз находим номер столбца по имени (а не в цикле!)
int id_index = r.GetOrdinal(“name”);
// В цикле доступ будет быстрее
while (r.Read()) {Console.WriteLine(r[id_index]+”\t”+r[name_index]);}
Отдельные поля записей набора данных могут иметь null-значения, то есть быть незаполненными. При попытке преобразования null-поля в требуемый тип будет сгенерировано исключение..
Ридер имеет метод IsDBNull(), предназначенный для индикации пустых полей:
If (!r.IsDBNull(id_inex))
Console.Writern(r.GetInt32(id_index))
Метод NextResult() выполняет переход к следующему набору или возвращает false, если такого набора нет.
cmd.CommandText = “SELECT * FROM Albums; SELECT * FROM Songs”;
con.Open();
var r = cmd.ExecuteReader();
// вложенные циклы, внешний – по наборам данных
Do
{
While (r.Read())
{
Cosole.Writeln(r[0]);
}
}