C# Visual Studio и базы данных: подключаем Microsoft SQL Server Compact
Этим материалом я начну новую серию статей, посвященных работе с базой данных в C# Visual Studio с помощью Microsoft SQL Server Compact 3.5. В процессе работы мы создадим приложение Windows Forms, в котором можно будет работать с файлом базы данных в формате sdf: добавлять записи в таблицу, удалять и изменять их. Также бонусом приложение сделаем "работающим из коробки" и на максимальном количестве даже чистых операционных систем. Уровень статей рассчитан на начинающего разработчика, обладающего хотя бы минимальным опытом работы с Visual Studio.
Сначала необходимо скачать и установить Microsoft SQL Server Compact 3.5 - я качал отсюда. После этого добавляем ссылку в обозревателе решений: вкладка ".NET" - библиотека "System.Data.SqlServerCe.Entity". После создания проекта по шаблону Windows Forms, надо настроить подключение к базе данных, да и не мешало бы её создать. Выбираем "Обозреватель баз данных" - "Подключения данных" - "Добавить подключение" - Источник данных "Microsoft SQL Server Compact 3.5 (Поставщик данных среды .NET для Microsoft SQL Server Compact 3.5)" - создать базу данных (предположим Books.sdf) в любом месте на компьютере - Проверить подключение - Ок. Пароль не устанавливаем, можно выбрать сортировку по "Россия - русский".
Далее создаем таблицу в этой базе, назовем её tbBooks; в ней два столбца: id и name. id - тип int, уникальный; name - тип nvarchar, остальные параметры по умолчанию.
Создаем подключение:
SqlCeConnection cn = new SqlCeConnection(@"Data Source = C:\rab\base\Books.sdf");Что такое? Visual Studio подчеркивает строку и показывает ошибку "Не удалось найти имя типа или пространство имен "SqlCeConnection" (пропущена директива using или ссылка на сборку?)"? У нас имеет место ошибка с директивой using:
using System.Data.SqlServerCe;Теперь ошибка должна исчезнуть. Для работы с базами данных есть очень удобный инструмент DataGridView. Добавляем его на нашу форму и подключаем к источнику данных (нашей таблице в базе): "Добавить источник данных проекта" - "База данных" - "Набор данных" - Выбираем наше подключение Books.sdf. Среда может попросить перенести файл в рабочий каталог и изменить настройки подключения: соглашаться не стоит - мы не предатели. Выбираем нашу таблицу tbBooks и подтверждаем наше подключение.
Если сейчас запустить проект, то можно даже изменять ячейки нашей таблицы. Однако, теперь мы имеем сразу две проблемы: во-первых, в столбце id ввод не чисел выбивает страшную и непонятную ошибку, а во-вторых, изменения не сохраняются. Первая проблема решается просто:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { TextBox tb = (TextBox)e.Control; tb.KeyPress += new KeyPressEventHandler(tb_KeyPress); } void tb_KeyPress(object sender, KeyPressEventArgs e) { if (dataGridView1.CurrentCell.ColumnIndex == 0) if (!(Char.IsDigit(e.KeyChar))) if (e.KeyChar != (char)Keys.Back) e.Handled = true; }Вторая также несложно. Добавляем на форму кнопку, в обработчик вставляем следующий код:
SqlCeCommand command = new SqlCeCommand("UPDATE tbBooks SET id = @id, name = @name WHERE (id = @id)"); command.Connection = tbBooksTableAdapter.Connection; tbBooksTableAdapter.Adapter.UpdateCommand = command; SqlCeParameter parametr; parametr = new SqlCeParameter("@id", SqlDbType.Int); parametr.SourceColumn = "id"; command.Parameters.Add(parametr); parametr = new SqlCeParameter("@name", DbType.String); parametr.SourceColumn = "name"; command.Parameters.Add(parametr); tbBooksTableAdapter.Update(booksDataSet.tbBooks); MessageBox.Show("Изменения успешно сохранены");Таким образом, в этой статье мы научились создавать базы данных, подключения к ним, таблицы в них, а также редактировать с помощью встроенного интерфейса.
Продолжение следует...
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.