ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 02.12.2023
Просмотров: 22
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
https://vscode.ru/prog-lessons/ms-access-i-c-sharp-rabotaem-s-bd.html
https://www.bestprog.net/ru/2015/12/21/003-подключение-к-базе-данных-microsoft-access/
https://www.nookery.ru/sample-application-for-working-with-ms-access-database-in-c-windows-form/
Работа с базой данной MS Access в C#
Прикладное программирование › Программирование на C# › Работа с базой данной MS Access в C#
Помечено: csharp, MS Access, базы данных
Просмотр 0 веток ответов
-
Автор
Сообщения
-
-
18.09.2019 в 08:42#5869
-
@admin
Подключение к БД. Извлечение данных
Для соединения с базой данных MS Access (файл .mdb) в C# следует использовать класс OleDbConnection со следующими параметрами соединения:
provider=Microsoft.Jet.OLEDB.4.0;data source=databaseFile
Здесь
databaseFile
— абсолютный путь к файлу базы данных Access. Провайдер соединения должен иметь значение
Microsoft.Jet.OLEDB.4.0
.
Пример параметров соединения с файлом базы данных Microsoft Access:
string connectionString =
"provider=Microsoft.Jet.OLEDB.4.0;" +
"data source=C:\data\dbase.mdb";
Бэкслеши в пути файла следует заэскейпить (именно поэтому в примере вместо одного бекслеша поставлено по два).
Вышеупомянутую строку параметров соединения следует передать конструктору:
OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
Ниже приведен листинг программы, которая подключается к базе данных клиентов в формате MS Access и выводит информацию по первому клиенту. Для отправки SQL-запросов и чтения их результатов здеь используются объекты
OleDbCommand
и
OleDbDataReader
.
using System;
using System.Data;
using System.Data.OleDb;
class OleDbConnectionAccess {
public static void Main() {
// Формируем строку с параметрами подключения к файлу базы данных
string connectionString =
"provider=Microsoft.Jet.OLEDB.4.0;" +
"data source=C:\data\dbase.mdb";
// создаем объект OleDbConnection для соединения с Бд и передаем его конструктору строку с параметрами подключения
OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);
// создаем объект OleDbCommand
OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();
// задаем SQL-запрос к базе данных в свойстве CommandText объекта OleDbCommand
// Результатом запроса должны быть данные клинета с именем Кто-то
myOleDbCommand.CommandText =
"SELECT CompanyName, ContactName, Address " +
"FROM Clients " +
"WHERE ContactName = 'Кто-то'";
// открываем соединение с БД с помощью метода Open() объекта OleDbConnection
myOleDbConnection.Open();
// создаем объект OleDbDataReader и вызываем метод ExecuteReader() для выполнения введенного SQL-запроса
OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();
// Читаем первую (в нашем случае - и единственную) строку ответа базы данных с помощью метода Read() объекта OleDbDataReader
myOleDbDataReader.Read();
// отображаем результат запроса
Console.WriteLine("myOleDbDataReader["
CompanyName "] = " +
myOleDbDataReader["CompanyName"]);
Console.WriteLine("myOleDbDataReader["
ContactName "] = " +
myOleDbDataReader["ContactName"]);
Console.WriteLine("myOleDbDataReader["
Address "] = " +
myOleDbDataReader["Address"]);
// закрываем OleDbDataReader методом Close()
myOleDbDataReader.Close();
// закрываем соединение с БД
myOleDbConnection.Close();
}
}
Результатом работы программы будет следующий текст:
myOleDbDataReader[«CompanyName»] = Кто-то и Компания
myOleDbDataReader[«ContactName»] = Кто-то
myOleDbDataReader[«Address»] = Улица Какая-то, д.12
Добавление, изменение и удаление данных в БД
Для чтения данных из БД MS Access используется класс
OleDbDataReader
. Но для выполнения запросов на вставку, изменение, или удаление данных из базы данных следует использовать метод класса
OleDbCommand ExecuteNonQuery ()
. Его вызов выполняет указанный в свойстве
CommandText
класса
OleDbCommand
запроc и возвращает
int
-число затронутых запосом полей.
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=data.mdb")
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "NSERT INTO myTable VALUES (1,2,3)";
int rowsAffected = cmd.ExecuteNonQuery();
System.Windows.Forms.MessageBox.Show(rowsAffected.ToString());
В данном случае
rowsAffected
будет равняться единице.
Во время
INSERT
‘ов можно использовать параметры, что может пригодиться, например, для загонки в базу данных файла изображения.
OleDbCommand cmd = new OleDbCommand("INSERT INTO MyTable (columns) VALUES (@param)",conn);
cmd.Parameters.Add("@param","abc[[''[]''kl'm");
cmd.ExecuteNonQuery();
Однако во взаимодействии C# и СУБД Microsoft Access есть одна очень неприятная загвоздка: при каких-либо ошибках в синтаксисе, или структуре SQL-запроса, программа падает в OS Loader Lock, и не дает никакой информации о произошедшей ошибке.
Чтобы этого избежать и получить довольно исчерпывающую информацию о произошедшей ошибке, следует выполнять запросы в
try-catch
блоках:
OleDbCommand cmd = dbconnection.CreateCommand();
cmd.CommandText = "DELETE FROM myTable WHERE (data='" + textbox1.Text + "')";
conn.Open();
try
{
int rowsAffected = cmd.ExecuteNonQuery();
System.Windows.Forms.MessageBox.Show(rowsAffected.ToString());
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
conn.Close();
Работа через DataSet и DataTable
При работе через
DataSet
и
DataTable
все аналогично за исклением того, что вместо
OleDbCommand
используется
OleDbDataAdapter
:
OleDbConnection conn = new OleDbConnection (@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=data.mdb");
OleDbDataAdapter myDataAdapter = new System.Data.OleDb.OleDbDataAdapter («SELECT * FROM table»,conn); // Создаем новый OleDbDataAdapterи передаем в его конструктор запрос и источник данных
DataSet myDataSet = new DataSet («Table»); // Создаем новый DataSet с таблицей «Table»
myDataAdapter.Fill (myDataSet,"Table"); // заполняем наш датасет данными из запроса
-
Автор
Сообщения
Просмотр 0 веток ответов
-
Для ответа в этой теме необходимо авторизоваться.
Перейти к содержимому
Начало формы
SEARCH
Конец формы
-
Главная -
Новости -
Рубрики -
О проекте -
Авторы -
Полезно знать -
Фотогалерея -
Рекомендуем -
Контакты
Работа с базой данных в C#
witrec.com
РЕКЛАМА
Как найти классных программистов в России
lady-xl.ru
РЕКЛАМА
Платья больших размеров: от 50 до 76!
В данной статье мы подробно поговорим о разработке небольшого приложения с помощью Visual Studio базы данных и языка C#. Советуем поэтапно выполнять все инструкции из данной статьи и у Вас получиться разработать свое приложение.
1. Создание базы данных
В качестве СУБД выберем программу Microsoft Access. Но вы можете использовать и другую базу данных.
Создаем базу данных в Microsoft Access и называем её «test». В этой базе данных создаем таблицу «contacts»:
Заполните базу данных данными:
Базу данных вы можете и другую создать и данные в ней можете другие добавить т.к. это не принципиально, но мы будем работать с данной таблицей.
2. Создание проекта
В Visual Studio создаём проект:
После создания проекта добавляем на форму компонент «DataGridView» (компоненты находятся слева в «Панели элементов»). Открываем область «Задачи»:
Открываем список «Выберите источник данных» и нажимаем на ссылку «Добавить источник данных проекта»:
Откроется «Мастер настройки источника данных». В качестве источника выбираем «База данных» и идем далее:
В следующем окне идем далее:
В окне «Выбор подключения к базе данных» нажимаем на «Создать подключение»:
В окне «Выбора источника» выбираем «Другое» и поставщик данных ставим «Поставщик данных .NET Framework для OLE DB»:
В следующем окне «Добавить подключение» выбираем в «Поставщик OLE DB» Microsoft Office 16.0 Access Database. В «Имя сервера или файла» вписываем путь к нашему файлу базы данных Access (который создали в первом пункте). Проверяем подключение и жмем «ОК»:
Update 2021: Visual Studio 2019 требует файл Access старого формата (.mdb – это старый формат баз данных Access 2002-2003):
В следующем окне идем далее:
Выйдет окно для переноса файла базы данных в Ваш проект нажимаем «Да»:
В следующем окне ничего не меняем и идем далее:
В следующем окне выбираем нашу таблицу «contacts» и жмем «Готово»:
После всех манипуляций наша форма должна быть примерно такой:
Если запустить наш проект, то можно увидать данные из нашей базы данных:
Поменяйте ширину всех столбцов на «150» чтобы столбцы вместились во все окно:
Вот так без единой строчки кода мы вывели данные из нашей таблицы на нужную нам форму. Переходим к 3 пункту.
3. Сохранение данных
Базу данных мы видим, но редактировать её невозможно и именно поэтому нам нужна кнопка «Сохранить». Добавляем на форму кнопку и в свойствах меняем имя на «SaveButton». После добавления кнопки нажимаем на нее два раза и пишем код:
private void SaveButton_Click(object sender, EventArgs e)
{
contactsTableAdapter.Update(testDataSet);
}
Вышеуказанный код обновляет запись в нашей таблице «contacts». TableAdapter использует команды данных для чтения и записи в базу данных. В «testDataSet» хранятся настройки подключения базы данных.
После добавления кода запустите свое приложение и попробуйте изменить любую запись и сохранить.
4. Изменение заголовков столбцов таблицы
Изменим текст столбцов и скроем столбец «img»:
Полезные свойства для изменения столбцов:
-
HeaderText – задает название столбца. -
Visible – скрывает заголовок или наоборот. -
Width – ширина столбца. -
Resizable – можно ли изменять ширину столбца.
После того как скроете заголовок «img» измените ширину всех остальных заголовков:
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;
}
}
После этого проверим работоспособность данного кода. Запустим приложение и попробуем удалить запись. Должно быть вот так:
Как только пользователь выделит строчку и нажмет кнопку «Delete» сработает наше событие «dataGridView1_UserDeletingRow» и выскочить окно с вопросом об удалении. Вот скриншот где находятся события выбранного компонента: