в окне запроса ввести путь \<имя компьютера><имя папки> и нажать кнопку OK. Папка будет открыта, и можно будет скопировать из нее файл NorthwindDemo.sdf на эмулятор.
Подключение приложения к базе данных
Теперь можно приступить к созданию приложения.
4. Расположить на форме компоненты Button, Label и TextBox так, как это показано на рис. 6.23, и соответствующим образом установить их свойство Text.
Рис. 6.23. Расположение компонентов на форме.
5. Объявить в начале класса формы несколько переменных, как это показано в листинге 6.27. Листинг 6.27
Dim dbc As SqlServerCe.SqlCeConnection
Dim dbcm As SqlServerCe.SqlCeCommand = New
_SqlServerCe.SqlCeCommand(В«SELECT * FROM CustomersВ»)
Dim dba As SqlServerCe.SqlCeDataAdapter
Dim dbt As DataTable
6. Написать код процедуры нажатия кнопки Connect, который приведен в листинге 6.28. Листинг 6.28
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
'Создаем объект соединения
dbc = New SqlServerCe.SqlCeConnection
'Задаем значение строки соединения
dbc.ConnectionString = В«Data Source=NorthwindDemo.sdfВ»
'Создаем объект таблицы
dbt = New DataTable(В«CustomersВ»)
'Связываем объект команды и соединение
dbcm.Connection = dbc
'Создаем объект адаптера, в качестве аргумента передавая ему команду
dba = New SqlServerCe.SqlCeDataAdapter(dbcm)
'Адаптер выполняет команду, и результатом ее выполнения заполняет
'таблицу dba.Fill(dbt)
'Связываем элементы отображения данных с полями таблицы
TextBox4.DataBindings.Add(В«TextВ», dbt, В«CustomerIDВ»)
TextBox5.DataBindings.Add(В«TextВ», dbt, В«CompanyNameВ»)
TextBox6.DataBindings.Add(В«TextВ», dbt, В«ContactNameВ»)
TextBox7.DataBindings.Add(В«TextВ», dbt, В«CityВ»)
TextBox8.DataBindings.Add(В«TextВ», dbt, В«CountryВ»)
TextBox9.DataBindings.Add(В«TextВ», dbt, В«PhoneВ»)
TextBox10.DataBindings.Add(В«TextВ», dbt, В«FAXВ»)
End Sub
7. Написать код процедуры нажатия кнопки Disconnect, который приведен в листинге 6.29. Листинг 6.29
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
dbc.Close()
dbt.Clear()
TextBox4.DataBindings.Clear()
TextBox5.DataBindings.Clear()
TextBox6.DataBindings.Clear()
TextBox7.DataBindings.Clear()
TextBox8.DataBindings.Clear()
TextBox9.DataBindings.Clear()
TextBox10.DataBindings.Clear()
End Sub
Обратите внимание на необходимость в этом случае «отвязать» контекст, иначе в результате повторного присоединения к данным возникнет ошибка.
8. Обработка событий щелчка на кнопках навигации по набору данных, собранному в таблице, показана в листинге 6.30.
Листинг 6.30
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button4.Click
'Предыдущая запись
Me.BindingContext(dbt). Position – = 1
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button3.Click
'Первая запись
Me.BindingContext(dbt). Position = 0
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button6.Click
'Последняя запись
Me.BindingContext(dbt). Position = Me.BindingContext(dbt). Count – 1
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button5.Click
'Следующая запись
Me.BindingContext(dbt). Position += 1
End Sub
9. Теперь можно запустить программу и нажать кнопку Connect. Компоненты TextBox будут заполнены информацией из таблицы Customers. Следует убедиться, что переход между записями осуществляется корректно. После нажатия кнопки Disconnect компоненты TextBox должны быть очищены (рис. 6.24).
Рис. 6.24. Работающее приложение.
Таким образом было организовано отображение информации из таблицы базы данных. Теперь неплохо бы было организовать ввод информации.
10. К навигатору нужно добавить еще две кнопки, чтобы он выглядел так, как показано на рис. 6.25.
Рис. 6.25. Улучшенный навигатор.
11. Для кнопки с изображением крестика нужно использовать обработчик, функциональность которого умещается в одну строку.
Me.BindingContext(dbt). CancelCurrentEdit()
12. Код обработчика нажатия кнопки с галочкой приведен в листинге 6.31. Листинг 6.31
Dim cmd As SqlServerCe.SqlCeCommand
cmd = New SqlServerCe.SqlCeCommand_
("UPDATE Customers SET Country = " + TextBox8.Text + " WHERE _
CustomerID = " + TextBox4.Text + " ", dbc)
If dbc.State = ConnectionState.Closed Then
dbc.Open()
End If
cmd.ExecuteNonQuery()
13.В Рти РґРІРµ команды показывают, каким образом можно отменить текущие изменения Рё как производится обновление данных РІ базе данных. Проект нужно СЃРЅРѕРІР° запустить, нажать РєРЅРѕРїРєСѓ Connect, отредактировать поле Country Сѓ любой записи Рё нажать РєРЅРѕРїРєСѓ V. Затем следует разорвать соединение щелчком РЅР° РєРЅРѕРїРєРµ Disconnect Рё СЃРЅРѕРІР° соединиться СЃ базой данных. Рто позволит заметить, что изменения были внесены РІ таблицу. РќРѕ если СЃРЅРѕРІР° внести изменения РІ поле Country Рё нажать РєРЅРѕРїРєСѓ X, то изменения Р±СѓРґСѓС‚ отменены.
Впрочем, этот пример показывает лобовой подход, когда текст берется из элементов TextBox и вставляется в строку формируемого выражения SQL. Более красиво и правильно в этом случае воспользоваться параметризированной командой.
14. Необходимо изменить процедуру обработки щелчка на кнопке V при помощи кода, приведенного в листинге 6.32.
Листинг 6.32
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button7.Click
Dim cmd As SqlServerCe.SqlCeCommand
cmd = New SqlServerCe.SqlCeCommand("UPDATE Customers SET CompanyName_
=? ContactName =? City =? Country =? Phone=? FAX =? WHERE_
CustomerID =?", dbc)
cmd.Parameters.Add(В«@aВ», SqlDbType.NVarChar, 40)
cmd.Parameters.Add(В«@bВ», SqlDbType.NVarChar, 30)
cmd.Parameters.Add(В«@cВ», SqlDbType.NVarChar, 15)
cmd.Parameters.Add(В«@dВ», SqlDbType.NVarChar, 15)
cmd.Parameters.Add(В«@eВ», SqlDbType.NVarChar, 24)
cmd.Parameters.Add(В«@fВ», SqlDbType.NVarChar, 25)
cmd.Parameters.Add(В«@gВ», SqlDbType.NChar, 5)
cmd.Parameters.Item(В«@aВ»). Value = TextBox5.Text
cmd.Parameters.Item(В«@bВ»). Value = TextBox6.Text
cmd.Parameters.Item(В«@cВ»). Value = TextBox7.Text
cmd.Parameters.Item(В«@dВ»). Value = TextBox8.Text
cmd.Parameters.Item(В«@eВ»). Value = TextBox9.Text
cmd.Parameters.Item(В«@fВ»). Value = TextBox10.Text
cmd.Parameters.Item(В«@gВ»). Value = TextBox4.Text
If dbc.State = ConnectionState.Closed Then
dbc.Open()
End If
cmd.ExecuteNonQuery()
End Sub
Теперь пользователь может редактировать и обновлять все поля, выведенные на экран. Следует обратить внимание, что SQL Server CE поддерживает параметризированные запросы, но не воспринимает параметры по именам. Значения параметров подставляются в выражение SQL в том порядке, в каком они были добавлены к списку параметров. Связывание данных
В упражнении было видно, что для того, чтобы приложение установило соединение с базой данных, запросило необходимые данные, получило и разместило их, необходимо использовать компоненты из пространства имен System.Data.SqlServerCe. Но когда данные отображаются, используется возможность привязывать источники данных к обычным элементам отбражения. Способность образовывать связи с данными реализуется в этих элементах на уровне методов и свойств, которые рассматриваются в табл. 6.26.