Создать приложение для работы с базой данных odbc mfc c visual studio 2019

Обновлено: 07.07.2024

Сначала необходимо скачать и установить 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, остальные параметры по умолчанию.

Что такое? Visual Studio подчеркивает строку и показывает ошибку "Не удалось найти имя типа или пространство имен "SqlCeConnection" (пропущена директива using или ссылка на сборку?)"? У нас имеет место ошибка с директивой using:

Теперь ошибка должна исчезнуть. Для работы с базами данных есть очень удобный инструмент DataGridView. Добавляем его на нашу форму и подключаем к источнику данных (нашей таблице в базе): "Добавить источник данных проекта" - "База данных" - "Набор данных" - Выбираем наше подключение Books.sdf. Среда может попросить перенести файл в рабочий каталог и изменить настройки подключения: соглашаться не стоит - мы не предатели. Выбираем нашу таблицу tbBooks и подтверждаем наше подключение.

Если сейчас запустить проект, то можно даже изменять ячейки нашей таблицы. Однако, теперь мы имеем сразу две проблемы: во-первых, в столбце id ввод не чисел выбивает страшную и непонятную ошибку, а во-вторых, изменения не сохраняются. Первая проблема решается просто:

Таким образом, в этой статье мы научились создавать базы данных, подключения к ним, таблицы в них, а также редактировать с помощью встроенного интерфейса.

Продолжение следует.

Среда Visual Studio . NET предоставляет различные подходы для реализации работы с базами данных:

  • Применение библиотеки MFC (Microsoft Foundation Class Library).
  • Применение ATL (Active Template Library).
  • Использование библиотек Framework.

Библиотека MFC реализует поддержку доступа к базам данных, основанную на двух механизмах:

  • через ODBC-драйверы;
  • с применением провайдеров данных OLE DB.

Приложения, использующие доступ к базам данных с применением ODBC -драйверов, в обязательном порядке используют класс CDatabase для создания объекта " база данных " и класс CRecordset для создания объекта "результирующий набор".

Библиотека MFC предоставляет для работы с базами данных через ODBC -драйверы следующие классы:

  • CDatabase – класс, инкапсулирующий соединение с источником данных;
  • CRecordset – класс, инкапсулирующий работу с результирующим набором, включая переход между записями, добавление, удаление и изменение записей, задание фильтров и выполнение параметризированных запросов;
  • CRecordView – класс, предоставляющий средства визуального отображения данных из созданного результирующего набора;
  • CDBException – класс, предназначаемый для обработки ошибок, которые возникают при работе с источником данных;
  • CFieldExchange – класс, который поддерживает RFX обмен данными между полями – членами класса результирующего набора и столбцами таблицы источника данных.

Библиотека MFC предоставляет для работы с базами данных с применением провайдеров OLE DB класс COleDBRecordView , используемый для отображения данных из результирующего набора (представляемого классом CRowset ) в элементах управления шаблона диалога. Этот класс объявляется в заголовочном файле afxoledb.h.

Для реализации клиентов и серверов OLE DB можно использовать ATL , предоставляющую OLE DB шаблоны как С++ шаблоны. Более подробно шаблоны ATL будут рассмотрены в следующей лекции.

Библиотека MFC предоставляет следующие два класса, упрощающие обмен данными :

  • CLongBinary – класс, предоставляющий средства работы с BLOB-объектами (Binary Large OBject), такими как bitmap-изображения, хранимыми в базе данных;
  • CDBVariant – класс, реализующий тип Variant, который позволяет сохранять информацию в базе данных, используя текущее значение, хранимое в переменной типа union.

Для доступа к конкретной базе данных требуется, чтобы был установлен соответствующий драйвер ODBC или OLE DB провайдер .

Приложения, работающие с базами данных, могут быть реализованы как консольные приложения, приложения с архитектурой документ- отображение ( SDI - и MDI-приложения), приложения-диалоги, серверные приложения.

1. Создание базы данных

В качестве СУБД выберем программу Microsoft Access. Но вы можете использовать и другую базу данных.

Создаем базу данных в Microsoft Access и называем её «test». В этой базе данных создаем таблицу «contacts»:

Заполните базу данных данными:

Базу данных вы можете и другую создать и данные в ней можете другие добавить т.к. это не принципиально, но мы будем работать с данной таблицей.

2. Создание проекта

В Visual Studio создаём проект:

Открываем список «Выберите источник данных» и нажимаем на ссылку «Добавить источник данных проекта»:

Откроется «Мастер настройки источника данных». В качестве источника выбираем «База данных» и идем далее:

В следующем окне идем далее:

В окне «Выбор подключения к базе данных» нажимаем на «Создать подключение»:

В следующем окне «Добавить подключение» выбираем в «Поставщик OLE DB» Microsoft Office 16.0 Access Database. В «Имя сервера или файла» вписываем путь к нашему файлу базы данных Access (который создали в первом пункте). Проверяем подключение и жмем «ОК»:

Update 2021: Visual Studio 2019 требует файл Access старого формата (.mdb – это старый формат баз данных Access 2002-2003):

В следующем окне идем далее:

Выйдет окно для переноса файла базы данных в Ваш проект нажимаем «Да»:

В следующем окне ничего не меняем и идем далее:

В следующем окне выбираем нашу таблицу «contacts» и жмем «Готово»:

После всех манипуляций наша форма должна быть примерно такой:

Если запустить наш проект, то можно увидать данные из нашей базы данных:

Поменяйте ширину всех столбцов на «150» чтобы столбцы вместились во все окно:

Вот так без единой строчки кода мы вывели данные из нашей таблицы на нужную нам форму. Переходим к 3 пункту.

3. Сохранение данных

Базу данных мы видим, но редактировать её невозможно и именно поэтому нам нужна кнопка «Сохранить». Добавляем на форму кнопку и в свойствах меняем имя на «SaveButton». После добавления кнопки нажимаем на нее два раза и пишем код:

После добавления кода запустите свое приложение и попробуйте изменить любую запись и сохранить.

4. Изменение заголовков столбцов таблицы

Изменим текст столбцов и скроем столбец «img»:

Полезные свойства для изменения столбцов:

  • HeaderText – задает название столбца.
  • Visible – скрывает заголовок или наоборот.
  • Width – ширина столбца.
  • Resizable – можно ли изменять ширину столбца.

После того как скроете заголовок «img» измените ширину всех остальных заголовков:

5. Защита от случайного удаления

Чтобы пользователь случайно не удалил запись в нашей базе данных нужно сделать так чтобы перед удалением приложение спрашивало об удалении записи.

Для этого перейдем к компоненту DataGridView, откроем список событий и установим обработчик для события UserDeletingRow. Нажмите два раза на пустую строчку возле события и перейдете к коду. Вписываем код:

После этого проверим работоспособность данного кода. Запустим приложение и попробуем удалить запись. Должно быть вот так:

6. Добавление данных

Добавляем новую форму в проект и называем ее «AddForm»:

Изменяем заголовок формы и добавляем на форму компоненты:

  • 1 groupBox c текстом «Добавление записи»;
  • 4 TextBox и меняем свойство «Name» на (tbName, tbPhone, tbMail, tbPhoto);
  • 4 label и меняем текст на (Имя, Телефон, E-mail, Фото);
  • 1 Button и меняем свойство «Name» на «AddBtn» (Добавить);
  • 1 Button и меняем свойство «Name» на «CloseBtn» (Закрыть).

Переходим на главную форму и добавляем кнопку «Добавить» для добавления новой записи. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:

Проверьте работоспособность приложения:

Возвращаемся на форму «Добавления записи». Пишем обработчик событий для кнопки «CloseBtn»:

Чтобы обработчик событий на кнопке «AddBtn» работал как надо нужно выполнить несколько действий. Зайти в «Form1.Designer.cs» и изменить модификаторы доступа на «public» нижеуказанных файлов:

  • System.Windows.Forms.DataGridView dataGridView1;
  • testDataSet testDataSet;
  • System.Windows.Forms.BindingSource contactsBindingSource;
  • testDataSetTableAdapters.contactsTableAdapter contactsTableAdapter;

Это нужно для того чтобы наша база данных была доступна для разных с ней манипуляций во всех создаваемых нами формах. Обработчик событий для кнопки «AddBtn»:

Проверьте работу приложения. Добавьте несколько новых записей через новую форму добавления записей.

7. Поиск данных

Реализуем самый простой поиск. Данный поиск используется в небольших приложениях. Создаем новую форму с именем «SearchForm» и добавляем на форму компоненты:

  • 1 GroupBox (Поиск);
  • 1 label;
  • 2 button (Найти и Закрыть);
  • 1 TextBox и меняем в свойствах «Name» на «tbStr».

Переходим на главную форму и добавляем кнопку «Найти» для поиска записей. Дважды щелкаем на нее и пишем код для вызова нашей новой формы:

Проверяем работоспособность приложения:

Возвращаемся на форму «Поиска». Пишем обработчик событий для кнопки «Закрыть»:

Пишем обработчик событий для кнопки «Найти»:

На главную форму добавляем кнопку «Выход» и пишем для нее код:

Итоговая форма приложения:

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

Проектирование базы данных MS Access

Создадим в Microsoft Access базу данных Workers (рабочие) с одной таблицей Worker (рабочий).

Таблица содержит следующие столбцы:

TextBox, ListBox и пять кнопок Button.

На макете формы в Visual Studio выполним двойные щелчки левой кнопкой мыши на всех кнопках, создав тем самым обработчики событий нажатия для каждой кнопки.

private void selectButton1_Click ( object sender , EventArgs e )

Также в окне свойств формы с помощью двойного щелчка мыши создадим обработчик события FormClosing, выполняющегося при закрытии формы.

Обработчик события закрытия формы - в нем будем закрывать соединение с БД Access

private void Form1_FormClosing ( object sender , FormClosingEventArgs e )

Файл с БД поместим в каталог \bin\Debug в папке с проектом.

public static string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Workers.mdb;" ; //public static string connectString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Workers.mdb;";

Далее добавим поле класса типа OleDbConnection. Экземпляр данного класса понадобится для установления соединения с базой данных MS Access.

// поле - ссылка на экземпляр класса OleDbConnection для соединения с БД

В конструкторе класса создадим экземпляр OleDbConnection и установим соединение с БД. Т.е. при запуске программы будет устанавливаться соединение с Access.

В обработчике события закрытия формы добавим код, закрывающий соединение с базой данных. Таким образом при выходе из программы соединение с БД будет закрываться.

private void Form1_FormClosing ( object sender , FormClosingEventArgs e )

Напишем в обработчик события нажатия кнопки SELECT1 код, выполняющий запрос выборки данных одного столбца одной строки. Вывод данных производится в TextBox.

private void selectButton1_Click ( object sender , EventArgs e ) string query = "SELECT w_name FROM Worker WHERE w_id = 1" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ; textBox1 . Text = command . ExecuteScalar ( ) . ToString ( ) ;

При нажатии кнопки SELECT2 будет выполняться запрос на получение многострочных данных из нескольких столбцов (по сути таблицы). Данные выводятся в ListBox.

private void selectButton2_Click ( object sender , EventArgs e ) string query = "SELECT w_name, w_position, w_salary FROM Worker ORDER BY w_salary" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ; // получаем объект OleDbDataReader для чтения табличного результата запроса SELECT listBox1 . Items . Add ( reader [ 0 ] . ToString ( ) + " " + reader [ 1 ] . ToString ( ) + " " + reader [ 2 ] . ToString ( ) + " " ) ; private void insertButton_Click ( object sender , EventArgs e ) string query = "INSERT INTO Worker (w_name, w_position, w_salary) VALUES ('Михаил', 'Водитель', 20000)" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ;

Запрос обновления данных UPDATE:

private void updateButton_Click ( object sender , EventArgs e ) string query = "UPDATE Worker SET w_salary = 123456 WHERE w_id = 3" ; // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ; private void deleteButton_Click ( object sender , EventArgs e ) // создаем объект OleDbCommand для выполнения запроса к БД MS Access OleDbCommand command = new OleDbCommand ( query , myConnection ) ;

private void btn_cl_del_Click(object sender, EventArgs e)

Проблема в том, что различается тип данных. Хоть в текстбокс и вводятся цифры, система воспринимает их как текст и поэтому не может произвести поиск по БД, чтобы выполнить запрос
Скажите, как с этим бороться?

Здравствуйте! Чтобы получить значение из текстового поля, используйте: textbox.Text

Здравствуйте! а что делать в случае если у меня 4 связанных таблицы? как сделать так чтобы с помощью запросов все они обрабатывались и были задействованы

Здравствуйте! Нужно использовать запросы JOIN.

Здравствуйте! Спасибо большое за видео, но есть один вопросик. Допустим есть таблица с полями Name (длинный текст) и Id ( короткий текст). Одну линейку из бд мы удаляем с помощью DELETE. У нас пускай были айди 1 2 3 4 5. Удалили третий. Теперь у нас 1 2 4 5. Как их обновить. Пробовал через UPDATE, но он разом проходит по всем линейкам БД. Таким образом получаем 1 1 1 1. Как решить эту проблему?

Здравствуйте! Когда выполняете запрос UPDATE нужно с помощью ключевого слова where указать к какой строке относится запрос (UPDATE TableName SET where А без where запрос изменит все строки в таблице.

Читайте также: