Работа с базой данных в 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”. На этом наша разработка приложения готова. Дальше попробуйте самостоятельно улучшить свое приложение.

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

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

109 ответов к “Работа с базой данных в 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 содержит

 

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

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