Простая база данных фильмов на 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. В нем есть все необходимые методы для соединения с базой данных и манипуляцией имеющимся в ней данными.
В конструкторе основной формы, приложение соединяется с базой данных при помощи следующего кода:
public Form1() { InitializeComponent(); // initiate DB connection string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=moviedb.mdb"; try { database = new OleDbConnection(connectionString); database.Open(); //SQL query to list movies string queryString = "SELECT movieID, Title, Publisher, Previewed, Year, Type FROM movie,movieType WHERE movietype.typeID = movie.typeID"; loadDataGrid(queryString); } catch (Exception ex) { MessageBox.Show(ex.Message); return; } }
Метод loadDataGrid загружает данные из базы данных в компонент dataGridView, при помощи SQL запроса, записанного в строковой переменной queryString. Реализация ниже:
public void loadDataGrid(string sqlQueryString) { OleDbCommand SQLQuery = new OleDbCommand(); DataTable data = null; dataGridView1.DataSource = null; SQLQuery.Connection = null; OleDbDataAdapter dataAdapter = null; dataGridView1.Columns.Clear(); // <-- clear columns SQLQuery.CommandText = sqlQueryString; SQLQuery.Connection = database; data = new DataTable(); dataAdapter = new OleDbDataAdapter(SQLQuery); dataAdapter.Fill(data); dataGridView1.DataSource = data; dataGridView1.AllowUserToAddRows = false; // <-- remove the null line dataGridView1.ReadOnly = true; // <-- so the user cannot type // following code defines column sizes dataGridView1.Columns[0].Visible = false; dataGridView1.Columns[1].Width = 340; dataGridView1.Columns[3].Width = 55; dataGridView1.Columns[4].Width = 50; dataGridView1.Columns[5].Width = 80; // insert edit button into datagridview editButton = new DataGridViewButtonColumn(); editButton.HeaderText = "Edit"; editButton.Text = "Edit"; editButton.UseColumnTextForButtonValue = true; editButton.Width = 80; dataGridView1.Columns.Add(editButton); // insert delete button to datagridview deleteButton = new DataGridViewButtonColumn(); deleteButton.HeaderText = "Delete"; deleteButton.Text = "Delete"; deleteButton.UseColumnTextForButtonValue = true; deleteButton.Width = 80; dataGridView1.Columns.Add(deleteButton); }
Интересной частью этого кода является добавление кнопок в ячейки dataGridView. При помощи этих кнопок, ты сможешь обновлять или изменять выделенные строки. Если тебе не нравится вариант с кнопками для каждой строки, то можешь создать всего лишь две кнопки (вне компонента dataGridView) и забиндить на них редактирование и удаление записей для выделенной строки. Для своего примера я использую первый способ.
Теперь нам нужно найти ответ на один интересный вопрос: «Как узнать когда нажали кнопку в определенной ячейке и собственно как повесить на эти кнопки код обработчика событий?». Мой пример решения ниже:
private void dataGridView1_CellContentClick (object sender, DataGridViewCellEventArgs e) { string queryString = "SELECT movieID, Title, Publisher, Previewed, Year, Type FROM movie, movieType WHERE movietype.typeID = movie.typeID"; 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 >= 0) { 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(); } ...
Как видишь, я использую событие CellContentClick. После того как выполнено нажатие кнопки, мне необходимо узнать выделенную строку. Я получаю индекс это на основании e.RowIndex. Используя эту переменную, ты можешь получить значение любой колонки выделенной строки. Как и было показано, первый параметр – это номер колонки, а второй – номер строки. Когда обновление выделенной строки завершается в Form2, я вызываю метод Update() на объекте dataGridView1, тем позволяя сразу увидеть изменения, которые были сделаны.
Кнопка «Удалить» работает по такому же принципу:
// delete button else if (dataGridView1.Columns[e.ColumnIndex] == deleteButton && currentRow >= 0) { // 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); }
Mission Completed
Пример, рассмотренный в статье достаточно прост. Все остальные доработки и совершенствования ложатся на твои могучие плечи. Если после прочтения у тебя возникли трудности с реализацией примера, то обязательно скачай мои исходники и хорошенько их изучи.
Автор: Ivan Svogor
Оригинал статьи: http://www.codeproject.com/KB/cs/simple_movie_database.aspx
Автор перевода: Игорь Антонов aka Spider_NET
E-mail:
| Вложение | Размер |
|---|---|
| MovieDB.zip | 303.41 КБ |
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 11080 просмотров


