ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode


MS Access и C# – работаем с базой данных из программы Windows Forms


Рассмотрим выполнение запросов SELECT, INSERT, UPDATE и DELETE к базе данных Microsoft Access из программы на языке C#, на примере проекта Windows Forms в Visual Studio. В конце статьи вы найдете исходники, а также видеоурок по данной теме.

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

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

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

  • w_id (идентификатор записи) – тип данных Счетчик;
  • w_name (имя) – тип данных Короткий текст;
  • w_position (должность) – тип данных Короткий текст;
  • w_salary (зарплата) – тип данных Числовой.

Схема базы данных MS Access для проекта на C#

Для корректной работы с базой данных MS Access с помощью языка C#, ее необходимо сохранить в формате с расширением .mdb

Сохранение БД MS Access в нужном формате для работы с ней на C#

Создание проекта Windows Forms в Visual Studio на языке C#

Создадим проект Windows Forms на C# и поместим на форму следующие компоненты:

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

Расположение элементов управления на форме Windows Forms для выполнения запросов к MS Access на C#

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

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

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

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

Написание кода на C# для выполнения запросов к MS Access

Добавим в класс формы строковое поле string – строку подключения к БД. В строке подключения в значении параметра Data Source указывается путь к файлу с базой данных.

Есть два варианта строки с различными провайдерами подключения. Если с первой строкой программа не будет работать – закомментируйте ее, а вторую раскомментируйте.


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

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

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

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

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

Далее запрос вставки данных (INSERT) в MS Access на C#:

Метод ExecuteNonQuery() класса OleDbCommand выполняет запрос и возвращает целое число типа int – количество строк затронутых выполняемым запросом. Данный метод подходит для запросов вставки INSERT, обновления UPDATE и удаления DELETE. Т.е. для тех, которые не возвращают данные.

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

Пример SQL-запроса удаления данных (DELETE) из БД Access с помощью языка C#:

Скачать исходник программы из данного урока можно, нажав на кнопку ниже. Программа написана в среде разработки Visual Studio.

Скачать исходник

 

 

Более подробное объяснение темы выполнения запросов из программы на C# к базе данных Microsoft Access доступно в видеоуроке, представленном ниже.

Видеоурок по теме работы с БД MS Access из программы на языке C#

MS Access и C# – работаем с базой данных из программы Windows Forms
4.81 (96.19%) 21 votes




Поделиться в соц. сетях:

6 комментария(ев) к статье “MS Access и C# – работаем с базой данных из программы Windows Forms

  1. Anton N

    Здравствуйте! Ваше видео мне очень помогло разобраться в некоторых вещах, спасибо большое!
    Не могли бы вы подсказать такую вещь – у меня есть текстбокс из которого я беру значение и использую это значение в запросе
    Пример:

    private void btn_cl_del_Click(object sender, EventArgs e)
    {

    string query = “DELETE FROM Clients WHERE ID='”+textbox+”‘”;
    OleDbCommand command = new OleDbCommand(query, myConnection);

    command.ExecuteNonQuery();

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

    1. admin Автор статьи

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

  2. Юзер

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

  3. MaKSa

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

    1. admin Автор статьи

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

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">