
1432
.pdf‘ Пример 9.2
Imports System.Data.OleDb Module Module1
Sub Main()
Dim s, q1, q2, q3, q4, q5 As String
‘ полное имя файла базы данных
s = System.IO.Path.GetFullPath(".") + "\Prim.mdb"
‘ строка ConnectionSring
s = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + s
‘строка запроса – отобрать все поля таблицы Stud q1 = "Select * From Stud"
ReadData(s, q1) Console.WriteLine()
‘строка запроса – строки, упорядоченные по полю Fio q2 = "Select * From Stud Order By Fio"
ReadData(s, q2) Console.WriteLine()
‘строка запроса – строки, в которых Fio оканчивается «н» q3 = "Select * From Stud Where Fio Like '%н'" ReadData(s, q3)
Console.WriteLine()
‘строка запроса – модифицировать колонку Grp во всех строках q4 = "Update Stud Set Grp=Grp+100"
ReadData(s, q4)
‘строка запроса – сортировка по полю Fio в обратном порядке q5 = "Select * From Stud Order By Fio"
ReadData(s, q5) Console.ReadLine()
End Sub
Public Sub ReadData(ByVal connectionString As String, ByVal queryString As String)
109
‘ установить соединение с базой данных
Using connection As New OleDbConnection(connectionString) ‘ создать запрос
Dim command As New OleDbCommand(queryString, connection)
‘открыть соединение connection.Open()
‘создать объект OleDbDataReader
Dim Rd As OleDbDataReader = command.ExecuteReader()
‘читать в цикле по одной строке из таблицы
While Rd.Read()
‘вывести на экран столбцы из прочитанной строки
Console.WriteLine(Rd(0).ToString()+" "+Rd(1).ToString())
End While
‘ закрыть объект OleDbDataReader Rd.Close()
End Using
End Sub
End Module
9.2. Задание на тему «Чтение информации из базы данных»
Разработать программу, которая выполняет несколько запросов к таблице базы данных. Отобранные строки записать в текстовый файл. Для тестирования программы подготовить таблицу базы данных Microsoft Access, состоящую не менее чем из 50 строк.
Порядок выполнения лабораторной работы
Создать базу данных для тестирования программы.
Создать новый проект – консольное приложение.
Добавить программный код.
Компилировать программу.
Тестировать программу.
Создать документ с описанием работы программы.
110

9.3. Отображение данных на форме в приложении Windows
Существуют компоненты, которые позволяют создавать программы для работы с базами данных. Соединение с базой данных обеспечивает компонент OleDbConnection. Взаимодействие с базой данных после того, как соединение уже установлено, обеспечивает компонент OleDbDataAdapter. Хранение информации, полученной из базы данных, обеспечивает компонент DataSet. Для отображения информации, полученной из базы данных, а также для редактирования, добавления и удаления записей предназначен компонент DataGridView. Отметим, что первые три компонента не отображаются на форме, а присутствуют только в виде значков в конструкторе формы. Имеется возможность связать поле базы данных с такими визуальными компонентами, как TextBox, Label, и отображать в них информацию из таблицы базы данных.
Если значков указанных компонентов нет в панели элементов, то можно их добавить, щелкнув по панели элементов правой кнопкой мыши и указав пункт Выбрать элементы. В открывшемся окне
Выбор элементов панели элементов (рис. 9.2) отметить требуемые компоненты.
Рис. 9.2. Добавление компонентов на Панель элементов
В процессе разработки приложения, работающего с базой данных, от программиста требуется аккуратно следовать определенной технологии, описанной далее.
111

Установление соединения с базой данных
Сначала нужно вынести на форму компонент OleDbConnection. Затем в окне свойств компонента ввести значение ConnectionString, например:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source= _ c:\pro\p655\p655\bin\debug\diplom.mdb
Описание свойств компонента OleDbDataAdapter
Компонент OleDbDataAdapter выносится на форму, а затем заполняются значения следующих его свойств.
Полю SelectCommand-Connection присвоить значение OleDbConnection1.
Вполе SelectCommand-CommandText записать команду SQL для отбора данных, например: «Select * From Dp», что означает показать все поля таблицы Dp.
Полю InsertCommand-Connection присвоить значение OleDbConnection1.
Вполе InsertCommand-CommandText записать команду SQL для вставки данных, например: «Insert Into Dp (id, fio, img) values (?,?,?)»,
чтобы добавить запись.
Затем щелкнуть мышью по кнопке в поле InsertCommandParameters. Откроется окно Редактор коллекции OleDbParameter
(рис. 9.3), в котором с помощью соответствующей кнопки добавить
Рис. 9.3. Редактор коллекции OleDbParameter
112

параметры для каждого отображаемого поля. Для каждого из столбцов таблицы нужно ввести его имя в два поля ParameterName и SourceColumn.
Полю UpdateCommand-Connection присвоить значение oleDbConnection1.
Вполе UpdateCommand-CommandText записать команду SQL
для обновления данных, например: «Update Dp Set fio=?, img=?, Where (id=?)», что означает обновить все измененные данные в таблице Dp. Здесь id – ключевое поле типа «Счетчик».
Затем щелкнуть мышью по кнопке в поле UpdateCommandParameters. Откроется окно Редактор коллекции OleDbParameter, в
котором выполнить действия, аналогичные InsertCommandParameters. Для ключевого поля здесь также создается соответствующий параметр.
Полю DeleteCommand-Connection присвоить значение oleDbConnection1.
Вполе DeleteCommand-CommandText записать команду SQL для удаления строк данных, например: «Delete From Where (id=?)», что означает удалить отмеченные строки в таблице Dp.
Затем щелкнуть мышью по кнопке в поле DeleteCommandParameters. Откроется окно Редактор коллекции OleDbParameter, в
котором необходимо ввести значения по аналогии с предыдущими параметрами, но только для ключевого поля.
Описание свойств компонента DataSet
Ввод свойств компонента DataSet начинается с размещения его на форме и работы с Редактором коллекции таблиц (рис. 9.4).
Рис. 9.4. Редактор коллекции таблиц
113

Вынести на форму компонент DataSet. Ввести по порядку значения его свойств. Сначала щелкнуть мышью по кнопке в поле пункт Tables. Появится окно Редактор коллекции таблиц (рис. 9.4),
в котором нужно ввести имя таблицы в поле TableName.
Затем нужно щелкнуть мышью по кнопке в поле Columns окна
Редактор коллекции таблиц и указать в окне Редактор коллекции столбцов (рис. 9.5) для каждого столбца его имя в полях
ColumnName и Caption.
Рис. 9.5. Окно Редактор коллекции столбцов
Описание свойств компонента DataGridView
Вынести на форму визуальный компонент dataGridView, определив для него с помощью перетаскиваня границ положение и размеры. Затем ввести значения свойств компонента.
Свойству DataSource присвоить значение DataSet1.
Свойству DataMember присвоить значение имени таблицы, например Dp.
Свойству AutoSizeColumnsMode присвоить значение Fill.
Далее нужно щелкнуть мышью по кнопке в поле Tables и в открывшемся окне Правка столбцов (рис. 9.6) указать имена столбцов в полях HeaderText и DataPropertyName, а для счетчика также False в поле Visible.
114

Рис. 9.6. Ввод параметров dataSet
Вынести на форму визуальный компонент TextBox1 и ввести для него значение свойства DataBindings-Text, связывающего TextBox1 c полеv базы данных. Для этого нужно щелкнуть по полю и выбрать нужный пункт в открывшемся меню (рис. 9.7).
Рис. 9.7. Установление связы TextBox c полем таблицы базы данных
После создания компонентов и описания их свойств необходимо создать функции, в тело которых затем будет записан код обработки событий. Это часто осуществляется двойным щелчком по компоненту. Для некоторых событий создание функций выполняется двойным щелчком по полю их в свойства компонента. Например, для того чтобы создать функцию Form1_FormClosing, предназначенную для обработки события Закрытие окна приложения, требуется щелкнуть по кнопке События в верхней части окна свойств компонента form1. Среди открывшихся событий отметить пункт Поведение-FormClosing двойным щелчком, после которого будет создана функция обработки события.
115
Код обработки событий
Параметры команд Select, Insert, Update и Delete, определенные выше с помощью редакторов коллекций, можно описать с помощью программного кода, например, код описания команды Insert:
‘ Пример 9.3
'создание шаблона команды Insert Adp.InsertCommand = New OleDbCommand( _
"INSERT INTO Dp (S_id, Fio, Img) VALUES (?,?,?)", Cnt1)
'создание параметров команды Insert Adp.InsertCommand.Parameters.Add( _ "@S_id", OleDbType.Integer, 5, "S_id") Adp.InsertCommand.Parameters.Add( _ "@Fio", OleDbType.VarChar, 20, "Fio") Adp.InsertCommand.Parameters.Add( _ "@Img", OleDbType.VarChar, 20, "Img")
Здесь Adp – имя OleDb-адаптера, Dp – имя таблицы базы данных, Cnt1 – имя OleDb-соединения, а S_id, Fio и Img – имена полей таблицы. При добавлении параметра в скобках указываются по порядку: имя параметра, тип данных, имя поля таблицы.
Аналогично описываются параметры команды Update:
‘ Пример 9.4
'создание шаблона команды Update Adp.UpdateCommand = New OleDbCommand( _ "UPDATE Dp SET Fio = ?, Img=? WHERE S_id = ?", Cnt1)
'создание параметров команды Update Adp.UpdateCommand.Parameters.Add( _ "@Fio", OleDbType.VarChar, 20, "Fio") Adp.UpdateCommand.Parameters.Add( _ "@Img", OleDbType.VarChar, 20, "Img") Adp.UpdateCommand.Parameters.Add( _
"@OldS_id", OleDbType.Integer, 5, "S_id").SourceVersion _
=DataRowVersion.Original
Отметим, что в последней команде создается создается параметр OldS_id, который хранит данные из поля счетчика S_id.
Описание параметров команды Delete содержит меньше строк:
116
‘ Пример 9.5
'создание шаблона команды Delete? Adp.DeleteCommand = New OleDbCommand( _ "DELETE FROM Dp WHERE S_id = ?", Cnt1)
'создание параметров команды Delete Adp.DeleteCommand.Parameters.Add( _
"@S_id", OleDbType.Integer, 5, "S_id").SourceVersion = _ DataRowVersion.Original
После определения свойств компонентов необходимо написать код обработки событий. Например, воспользовшись методом Application.StartupPath, который дает путь к папке, из которой запускается программа, можно получить полное имя файла базы данных.
Dim Fdb As String
Fdb = Application.StartupPath+"\Diplom.mdb"
Используя полученное таким образом полное имя файла базы данных, открыть соединение с базой данных. OleDbConnection1.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Fdb
Используя путь к папке, из которой запускается программа, можно получить и другие адреса, например адрес папки с фотографиями.
Dim Foto As String
Foto = Application.StartupPath + "\Img\"
Данные из таблицы базы данных помещаем в DataSet1. OleDbDataAdapter1.Fill(DataSet1.Tables(0))
Фотографии отображаем в поле PictureBox1 с помощью метода Drawing.Bitmap.FromFile. Перемещение по строкам в таблице вызывает изменение компонента TextBox1, связанного с полем img таблицы. Как только происходит изменение TextBox1, выполняются следующие команды.
‘ Пример 9.6
Dim Ff As String
if (textBox1.Text.Length == 0) Ff = Foto + "Нет_фото.jpg" else
117

Ff = Foto + textBox1.Text pictureBox1.Image=System.Drawing.Bitmap.FromFile(Ff) End If
Для обработки события «Закрытие окна приложения» в процедуре Form1_FormClosing нужно применить команду сохранения изменений в базе данных.
OleDbDataAdapter1.Update(dataTable1)
Если в программе нужно показать несколько таблиц, то для каждой из них выгодно использовать вкладки TabControl – TabPage. Сначала на форме размещается компонент TabControl (рис. 9.8).
Рис. 9.8. Визуальный компонент «Вкладка»
Чтобы открыть в этом компоненте новую вкладку, необходимо щелкнуть по нему правой кнопкой мыши и выполнить «Добавить вкладку». Далее нужно переименовать вкладку и разместить на ней необходимые компоненты, в частности таблицу базы данных.
Связь с базой данных можно установить с помощью следующих действий: Данные – Добавить новый источник данных – База
данных – Создать подключение – Обзор (указать файл базы данных) – Проверить подключение – Копировать файл базы данных в проект – Выбрать таблицы и запросы базы данных и их поля, которые нужно отобразить.
Пример программы
В программе выполнены все действия, описанные выше. Таблица Dp базы Diplom.mdb данных просматривается в компоненте dbGridView1. Для тех записей, в которых имеется имя графического файла, изображение открывается в окне pictureBox1. Новые строки сохраняются в процедуре Form1_FormClosing, выполняющейся перед закрытием формы.
‘ Пример 9.7
Imports System.Data.OleDb Public Class Form1
118