Работа с базами данных в Windows Forms с использованием языка программирования C++

Как известно, начиная с версии 2008, работа с базами данных (БД) в Windows Forms средствами Microsoft Visual C++ (VC++) невозможна. Однако это не совсем так.

Начиная с версии 2008, стала недоступна работа с БД с помощью уже привычного графического интерфейса. То есть, для работы с ними нельзя создать и настроить, а, следовательно, и использовать, не визуальные элементы управления DataSet, BindingSource и TableAdapter. В то же время возможно работы с БД при помощи «обычных» классов ADO.NET полностью сохранилась.

Для реализации взаимодействия с БД служат «обычные» классы OleDbConnection, OleDbCommand и OleDbDataReader. Но, в виду того, что в Windows Forms используется управляемый код с привязкой C++/CLI, их использование имеет некоторые особенности.

Рассмотрим пример. Есть БД Microsoft Office Access, которая содержит список авторов книг в таблице Author.

Таблица

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

До получения данных

Данные будем загружать в элемент управления DataGridView при нажатии на кнопку «Получить данные».

Создадим в обработчике события нажатия этой кнопки подключение к БД.

Обратите внимание на особенности синтаксиса объявления объектов управляемых типов (значок» ^» и оператор «gcnew» вместо «new»)

Далее необходимо создать запрос к БД с помощью класса OleDbCommand и выполнить его получив объект класса OleDbDataReader.

После можно заполнять элемент DataGridView данными, которые были получены из БД.

Когда загрузка данных будет завершена, необходимо закрыть соединение с БД.

В результате данные из таблицы Authors будут успешно отображены в программе.

После получения данных

Ниже представлен полный исходный код загрузки данных.

Операции добавления (INSERT), изменения (UPDATE), и удаления (DELETE) данных не представляют особой сложности. Они даже проще обычной загрузки данных.

Например, для того чтобы добавить новую запись в таблицу достаточно написать в свойстве CommandText объекта класса OleDbCommand соответствующий SQL запрос и выполнить его с помощью метода ExecuteNonQuery.

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

То есть, при выполнении операций добавления изменения и удаления объект класса OleDbDataReader становится не нужен (считывания данных нет).

Как видно из приведённых выше примеров исходного кода, работа с БД в Windows Forms средствами VC++ ничем не отличается от аналогичных операций в C# за исключением некоторых особенностей связанных с тем, что в Windows Forms всё-таки используется управляемый код и поэтому в VC++ был введён соответствующий синтаксис.

Таким образом, используя «обычные» классы ADO.NET можно разрабатывать Windows Forms приложения для работы с БД практически любой степени сложности.

2 комментария

  1. Здравтсвуйте!!! А как сохранить изменения в БД, например вот так не работает:
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
    //Сохранение данных в БД
    OleDbDataAdapter ^dataAdapter1=gcnew OleDbDataAdapter();
    DataSet ^dataSet1=gcnew DataSet();

    dataAdapter1->Update(dataSet1->Tables["Database1"]);
    }

    После нажатия на кнопку, пишет, что dataSet1 не может быть неопределенным…

    1. Здравствуйте!
      Приведённый Вами код и не должен работать.
      Вы создаёте OleDbDataAdapter и DataSet отдельно. Без привязки к БД.
      Вам необходимо создать подключение к БД (в статье есть пример) и передать его в качестве параметра конструктора OleDbDataAdapter.
      string sql = "SELECT * FROM Table_1";
      adapter = new OleDbDataAdapter(sql, connection);

      После этого можно создавать DataSet и заполнить его при помощи метода Fill.
      DataSet ^dataSet = gcnew DataSet();
      adapter.Fill(dataSet);

      По идее, должно сработать.
      Как альтернативный вариант. Можно воспользоваться примером из статьи для INSERT доработав его для UPDATE.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *