Размер
Простая база данных фильмов на C# с использованием Microsoft Access
Play

Простая база данных фильмов на C# с использованием Microsoft Access

В этой небольшой статье я хочу рассказать тебе про написание простейшей база данных фильмов, или проще говоря, видео каталога, при помощи C# и Microsoft Access. В статье я рассмотрю все необходимые моменты: подключение к программе mdb файла, чтение/запись данных с использованием dataGridView и т.д.

Первым делом, тебе необходимо создать базу данных в Microsoft Access. База данных очень проста, поэтому у тебя есть непаханое поле для экспериментов и совершенствования.

// Первая таблица будет содержать фильмы // где movieID является авто-увеличивающимся значением, также primary key //(главным ключом), и typeID вторичным ключом (foreign key) // movies (movieID, Title, Publisher, Previewed, Year, typeID) // --------------------------------------------------------------- // Вторая таблица будет хранить жанры фильмов // movietypes (typeID, Type)

Если ты сразу планируешь создать большую базу, то воспользуйся каким-нибудь генератором базы данных. Для небольшого проекта, такого как этот, в применение таких инструментов нет необходимости.

Ok, теперь у нас есть база данных. Можно двигаться дальше. Microsoft Access позволяет добавлять записи, но мы хотим создавать их из своего приложения. Для решения этой задачи мы воспользуемся пространством имен System.Data.OleDB. В нем есть все необходимые методы для соединения с базой данных и манипуляцией имеющимся в ней данными.

В конструкторе основной формы, приложение соединяется с базой данных при помощи следующего кода:

[code=c#] public Form1() < InitializeComponent(); // initiate DB connection string connectionString ; try < database = new OleDbConnection(connectionString); database.Open(); //SQL query to list movies string queryString ; loadDataGrid(queryString); > catch (Exception ex) < MessageBox.Show(ex.Message); return; > > [/code=c#]

Метод loadDataGrid загружает данные из базы данных в компонент dataGridView, при помощи SQL запроса, записанного в строковой переменной queryString. Реализация ниже:

[code=c#] public void loadDataGrid(string sqlQueryString)

[/code=c#]

Интересной частью этого кода является добавление кнопок в ячейки dataGridView. При помощи этих кнопок, ты сможешь обновлять или изменять выделенные строки. Если тебе не нравится вариант с кнопками для каждой строки, то можешь создать всего лишь две кнопки (вне компонента dataGridView) и забиндить на них редактирование и удаление записей для выделенной строки. Для своего примера я использую первый способ.

Теперь нам нужно найти ответ на один интересный вопрос: «Как узнать когда нажали кнопку в определенной ячейке и собственно как повесить на эти кнопки код обработчика событий?». Мой пример решения ниже:

[code=c#] private void dataGridView1_CellContentClick (object sender, DataGridViewCellEventArgs e) < string queryString ;

int currentRow = int.Parse(e.RowIndex.ToString()); try < string movieIDString = dataGridView1[0, currentRow].Value.ToString(); movieIDInt = int.Parse(movieIDString); > catch (Exception ex) < > // edit button if (dataGridView1.Columns[e.ColumnIndex] == editButton && currentRow >= < string title = dataGridView1[1, currentRow].Value.ToString(); string publisher = dataGridView1[2, currentRow].Value.ToString(); string previewed = dataGridView1[3, currentRow].Value.ToString(); string year = dataGridView1[4, currentRow].Value.ToString(); string type = dataGridView1[5, currentRow].Value.ToString();

Form2 f2 = new Form2(); f2.title = title; f2.publisher = publisher; f2.previewed = previewed; f2.year = year; f2.type = type; f2.movieID = movieIDInt; f2.Show(); dataGridView1.Update(); > . [/code=c#]

Как видишь, я использую событие CellContentClick. После того как выполнено нажатие кнопки, мне необходимо узнать выделенную строку. Я получаю индекс это на основании e.RowIndex. Используя эту переменную, ты можешь получить значение любой колонки выделенной строки. Как и было показано, первый параметр – это номер колонки, а второй – номер строки. Когда обновление выделенной строки завершается в Form2, я вызываю метод Update() на объекте dataGridView1, тем позволяя сразу увидеть изменения, которые были сделаны.

Кнопка «Удалить» работает по такому же принципу:

[code=c#] // delete button else if (dataGridView1.Columns[e.ColumnIndex] == deleteButton && currentRow >= < // delete SQL query string queryDeleteString = "DELETE FROM movie WHERE movieID = "+movieIDInt+""; OleDbCommand sqlDelete = new OleDbCommand(); sqlDelete.CommandText = queryDeleteString; sqlDelete.Connection = database; sqlDelete.ExecuteNonQuery(); loadDataGrid(queryString); > [/code=c#]

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

📎📎📎📎📎📎📎📎📎📎