Работа с базой данных в C#

В данной статье мы подробно поговорим о разработке небольшого приложения с помощью Visual Studio базы данных и языка C#. Советуем поэтапно выполнять все инструкции из данной статьи и у Вас получиться разработать свое приложение.

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

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

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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

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

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


Работа с базой данных в C#

После создания проекта добавляем на форму компонент «DataGridView» (компоненты находятся слева в “Панели элементов”). Открываем область «Задачи»:


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

В окне «Выбора источника» выбираем «Другое» и поставщик данных ставим «Поставщик данных .NET Framework для OLE DB»:


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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


Работа с базой данных в C#

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

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

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

private void SaveButton_Click(object sender, EventArgs e)
 {
   contactsTableAdapter.Update(testDataSet);
 }

Вышеуказанный код обновляет запись в нашей таблице “contacts”. TableAdapter использует команды данных для чтения и записи в базу данных. В “testDataSet” хранятся настройки подключения базы данных.

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

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

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


Работа с базой данных в C#

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

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

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


Работа с базой данных в C#

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

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

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

private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
        {
            DialogResult dr = MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
            if (dr == DialogResult.Cancel)
            {
                e.Cancel = true;
            }
        }

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


Работа с базой данных в C#

Как только пользователь выделит строчку и нажмет кнопку “Delete” сработает наше событие “dataGridView1_UserDeletingRow” и выскочить окно с вопросом об удалении. Вот скриншот где находятся события выбранного компонента:


Работа с базой данных в C#

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

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


Работа с базой данных в C#


Работа с базой данных в C#

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

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


Работа с базой данных в C#

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

 private void button1_Click(object sender, EventArgs e)
        {
            AddForm af = new AddForm();
            af.Owner = this;
            af.Show();
        }

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


Работа с базой данных в C#

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

private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

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

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

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

public void AddBtn_Click(object sender, EventArgs e)
        {
            Form1 main = this.Owner as Form1;
            if (main != null)
            {
                DataRow nRow = main.testDataSet.Tables[0].NewRow();
                int rc = main.dataGridView1.RowCount + 1;
                nRow[0] = rc;
                nRow[1] = tbName.Text;
                nRow[2] = tbPhone.Text;
                nRow[3] = tbMail.Text;
                nRow[4] = tbPhoto.Text;
                main.testDataSet.Tables[0].Rows.Add(nRow);
                main.contactsTableAdapter.Update(main.testDataSet.contacts);
                main.testDataSet.Tables[0].AcceptChanges();
                main.dataGridView1.Refresh();
                tbName.Text = "";
                tbPhone.Text = "";
                tbMail.Text = "";
                tbPhoto.Text = "";
            }
        }

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

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

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

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


Работа с базой данных в C#

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

private void button2_Click(object sender, EventArgs e)
        {
            SearchForm sf = new SearchForm();
            sf.Owner = this;
            sf.Show();
        }

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


Работа с базой данных в C#

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

private void button2_Click(object sender, EventArgs e)
        {
            Close();
        }

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

private void button1_Click(object sender, EventArgs e)
        {
            Form1 main = this.Owner as Form1;
            if (main != null)
            {
                for (int i = 0; i < main.dataGridView1.RowCount; i++)
                {
                    main.dataGridView1.Rows[i].Selected = false;
                    for (int j = 0; j < main.dataGridView1.ColumnCount; j++)
                        if (main.dataGridView1.Rows[i].Cells[j].Value != null)
                        if (main.dataGridView1.Rows[i].Cells[j].Value.ToString().Contains(tbStr.Text))
                            {
                                main.dataGridView1.Rows[i].Selected = true;
                                break;
                            }
                }
            }
        }

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

private void button3_Click(object sender, EventArgs e)
        {
            Close();
        }

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


Работа с базой данных в C#

Верхнее меню на нашей форме это компонент “MenuStrip”. На этом наша разработка приложения готова. Дальше попробуйте самостоятельно улучшить свое приложение.

Исходники готового приложения можно скачать по ссылке.

Решение проблем совместимости Microsoft Access 2019 и Visual Studio 2022:



 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

113 ответов к “Работа с базой данных в C#”

Здравствуйте! Три вопроса. Первый. Имеются ли где-то ещё какие-нибудь Ваши материалы? Это первый ресурс, на котором я почти всё сразу понял. На всех остальных ресурсах, которые мне встречались, сплошная заумь, для чайников совершенно не пригодная. Второй вопрос. Как осуществить запрет ввода пустых записей? И третий. Хочу на главную форму установить кнопку удаления записи. При этом защита от случайного удаления должна остаться. Как это сделать?
Спасибо!

 

Здравствуйте!
Все материалы находятся только на моей сайте и еще у нас есть yutube-канал: https://www.youtube.com/channel/UCMDKC5V0oCSEt62HTwIqugw?view_as=subscriber

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

Данная кнопка уже реализовано на одной из форм там просто по примеру ее можно сделать.

 

Спасибо! С пустыми записями с Вашей подсказкой уже разобрался. Ваши материалы обязательно буду использовать для развития собственного интеллекта. Кроме того, буду их рекомендовать некоторым своим ученикам (работаю учителем информатики в школе). Думаю, с кнопкой тоже разберусь. Удачи Вам в Вашей работе!

 

А если в таблице много записей, можно ли как-то сделать, чтобы при нажатии на кнопку поиска, не просто где-то там за границей видимости запись подсвечивалась, а чтобы прямо таки сам BindingNavigator отматывал к той записи, чтобы её видно было.

 

Приятная статья.
На шаге 3 не распознаёт Update.
Выдаёт: System.NotImplementedException: “Метод или операция не реализована.”
Это происходит в системном методе
internal void Update(MirDataSet mirDataSet)
{
throw new NotImplementedException();
}
Надо некую библиотеку добавить или метод дописать, помогите.

 

При запуске программы показывает только первую строчку из базы данных. Что делать?

 

Здравствуйте. Спасибо за полезную и понятную информацию. При каждом новом запуске информация в Базе данных не сохраняется. Как это можно исправить?

 

Здравствуйте, если вы запускаете программу через Visual Studio, то сохраняться не будет. Заходите в проект и запускайте .exe вашей программы и все будет сохраняться.

 

Здравствуйте. Спасибо за полезную и понятную информацию. В нашей базе данных несколько таблиц, для каждой таблицы создали свою форму и из одной формы переходим в другую, запись данных в первую таблицу происходит нормально, но во второй форме запись во вторую таблицу не сохраняется. Может проблема в том что для каждой формы связь с базой данных сделали так как вы опрерделили? Как можно исправить проблему.

 

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

 

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

 

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

 

Здравствуйте
В моей БД несколько таблиц, при добавлении данных показывает ошибку
System.ArgumentException: “Входная строка имела неверный формат.Невозможно сохранить в столбце Код_клиента. Ожидался тип Int32.”
Происходит она на строке
nRow[1] = textBox1.Text;
В первой таблице все сохранялось

 

Нашел свою ошибку самостоятельно
Если у вас не одна, а несколько таблиц
в 6 пункте в обработчик событий для кнопки «AddBtn»:
вместо Tables[0] вместо 0, ставьте номер таблицы соответственно

 

Добрый вечер, все сделал даже с добавлением, но почему то перестал сохранять изменения на первой форме,при нажатии сохранить
“private void SaveButton_Click(object sender, EventArgs e)
{
workTableAdapter.Update(workDataSet);
}”
, выдает (System.InvalidOperationException: “Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками.”)

 

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

Ваш адрес email не будет опубликован.

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Entity Framework

Entity Framework

ADO.NET Entity Framework (EF) — объектно-ориентированная технология доступа к данным, является object-relational mapping (ORM) решением для .NET Framework от Microsoft. Предоставляет возможность взаимодействия с объектами

 
Создание сканера портов

Создание сканера портов

В прошлой статье “Сокеты в C#” мы познакомились с сокетами и подробно рассмотрели классы для работы с ними. В этой статье мы разработаем простое приложение

 
Сокеты в С#

Сокеты в С#

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

 
Пространство имен System.Net.

Пространство имен System.Net.

В этой статье коротко поговорим о пространстве имен System.Net и некоторых его классах. В последующих статьях будем рассматривать другие его классы. Пространство имён System.Net содержит

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: