Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
4.3.3. Параметризированные запросы
Выше были рассмотрены основные методы объекта Command в консольных приложениях. Это дало возможность понять синтаксис самих методов, без привязки к какому-либо интерфейсу. Однако, после того как синтаксис стал ясен, возникает вопрос - как же использовать эти методы в реальных приложениях? Очевидно, что простое копирование кода в конструктор формы, по сути, не изменит пример. Следовательно, необходимо привязывать вводимые значения к элементам пользовательского интерфейса, например, к текстовым полям. Но это означает, что параметры строки запроса будут неизвестны до тех пор, пока пользователь не введет соответствующие значения. Например, для метода ExecuteNonQuery строка commandText имела следующий вид: myCommand.CommandText =
Если создадим приложение, где пользователь будет вводить фамилию и код туриста, то мы не можем заранее указать, какие это будут значения. Логически запрос можно представить примерно так: myCommand.CommandText = " UPDATE Туристы SET
Для решения таких задач, которые возникли еще в самом начале разработки языка SQL, были придуманы параметризированные запросы. В них неизвестные значения заменяются параметрами следующим образом: myCommand.CommandText =
Здесь @Family - параметр для неизвестного значения фамилии, @TouristID - параметр для неизвестного значения кода туриста. Отметим, что параметры пишутся без кавычек. Теперь можно выполнить привязку параметров к тексту, вводимому пользователем.
Использование метода ExecuteNonQuery
Для демонстрации привязки параметров создадим новое Windows- приложение и разместим на нем компоненты пользовательского интерфейса. Форма в режиме дизайна будет иметь следующий вид (рис. 87).
Рис. 87. Разработанное приложение, вид формы в режиме дизайна Подключаем пространство имен для работы с базой данных: using System.Data.SqlClient; В классе формы создаем экземпляр conn: SqlConnection conn = null; Обработчик кнопки btnUpdate будет иметь следующий вид: private
void btnUpdate_Click(object sender, System.EventArgs e) {
Обратим внимание на то, что в блоке finally происходит закрытие соединения, это нужно сделать в любом случае, независимо от результата выполнения команды. Значения, введенные пользователем в текстовые поля txtFamilyUpdate и txtTouristIDUpdate, помещаются в переменные Family и TouristID. В запросе к базе данных используются два параметра - @Family и @TouristID. Они добавляются в коллекцию объекта Command с помощью метода Add свойства Parameters, а затем значения параметров устанавливаются равными переменным Family и TouristID. Метод Add перегружен. Использованный в данном фрагменте кода первый вариант этого метода принимает наибольшее количество свойств. Описание некоторых свойств метода Add приводится в таблице 16. Конструкция метода Add, свойства Parameters объекта Command для поставщика данных OLE DB имеет в точности такую же структуру. Таблица 16. Свойства метода Add
Добавим обработчик кнопки btnInsert. private void
btnInsert_Click(object sender, System.EventArgs e) {
В запросе используются четыре параметра: @TouristID, @Family, @FirstName, @MiddleName. Тип данных создаваемых параметров соответствует типу данных полей таблицы «Туристы» в базе. Добавим обработчик кнопки btnDelete. private void
btnDelete_Click(object sender, System.EventArgs e) {
Запускаем приложение. В каждой из групп заполняем поля, затем нажимаем на кнопки. Проверять результат можно, запуская Management Studio и просматривая каждый раз содержимое таблицы «Туристы» (рис. 88 - 90).
Рис. 88. Пример обновления
Рис. 89. Пример удаления
Рис. 90. Пример добавления
Использование метода ExecuteScalar
Применять метод ExecuteScalar объекта Command в Windows-приложениях очень легко - достаточно указать элемент управления (текстовое поле, надпись) для вывода одиночного значения.
Использование метода ExecuteReader
Теперь рассмотрим метод ExecuteReader. Одна из главных задач при использовании этого метода - разместить возвращаемый набор данных в элементе управления на форме. Создайте новое приложение. Расположите на форме элемент ListBox, его свойству Dock установите значение Bottom. Добавим элемент Splitter, свойству Dock которого также установим значение Bottom. Наконец, перетаскиваем элемент ListView, свойству Dock которого устанавливаем значение Fill. Далее, нужно настроить внешний вид элемента ListView: в окне Properties в поле свойства Columns нажимаем на кнопку (...). В редакторе «Column Header Collection Editor» добавляем следующие четыре элемента: Name Text
Для отображения созданных столбцов свойству View элемента устанавливаем значение Details. Также включим режим отображения линий сетки - в свойстве GridLines выбираем значение True. Сделанные изменения немедленно отобразятся на элементе. Подключаем пространство имен для работы с базой: using System.Data.SqlClient; В классе формы создаем объекты conn и dataReader: SqlConnection
conn =
null;
В конструкторе формы добавляем код для заполнения данными элементов управления: public
Form1() {
Метод GetТипДанных позволяет приводить значения, возвращаемые объектом DataReader, если заранее известен их тип данных. Запускаем приложение. На форму выводятся данные в виде списка в элементе ListBox и в виде таблицы в элементе ListView (рис. 91). Вывод данных в элемент ListView приводит к достаточно удовлетворительному результату, однако более привычным является вывод в элемент DataGridView. Ранее, при использовании объекта DataSet, источник данных для элемента DataGridView указывался следующим образом: dataGridView1.DataSource = dataset.Tables["Название_таблицы"].DefaultView; Или так: dataGridView1.DataSource = dataset; Объект DataReader не поддерживает аналогичного вывода - мы не можем связать объекты таким простым образом: dataGridView1.DataSource = datareader;
Рис. 91. Использование метода ExecuteReader Одним из способов вывода является применение дополнительных объектов DataTable. Объект DataTable предназначен для хранения таблицы, полученной из базы данных. Создадим новое приложение. Перетаскиваем на форму элемент управления DataGrid, его свойству Dock устанавливаем значение Fill. Подключаем пространство имен для работы с базой: using System.Data.SqlClient; В классе формы создаем следующие объекты: SqlConnection conn = null;
Запускаем приложение (рис. 92):
Рис. 92. Демонстрация работы приложения
|
1 |
Оглавление
|