База данных под управлением клиента C#

Автор: Пользователь скрыл имя, 19 Марта 2012 в 09:08, курсовая работа

Описание работы

В данном курсов проекте необходимо было создать базу данных в любой среде и осуществить ее управление при помощи клиента, созданного на языке программирования C#. База данных была написана в программе Microsoft Access.
Microsoft Access - это функционально полная реляционная СУБД. В ней предусмотрены все необходимые вам средства для определения и обработки данных, а также для управления ими при работе с большими объемами информации. Что касается легкости использования, то Microsoft Access совершил здесь настоящий переворот, и многие для создания своих собственных баз данных и приложений обращаются именно к нему.

Работа содержит 1 файл

Антоненко курсовая.docx

— 47.26 Кб (Скачать)

Каскадное обновление и удаление связанных  записей

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

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

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

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

Язык SQL (аббревиатура Structured Query Language) – это язык структурированных запросов, стандартный язык, предназначенный для создания баз данных, добавления новых и поддержки имеющихся данных, а также извлечения требуемой информации. Язык SQL с самого начала был создан, чтобы работать с данными из тех баз, которые следуют реляционной модели.

Каждому запросу MS Access можно сопоставить эквивалентную инструкцию SQL. В MS Access пользователи, знакомые с языком SQL, могут использовать его для просмотра и изменения запросов в режиме конструктора, определения свойств форм и отчетов, создания специальных запросов (запросы объединения, запросы к серверу и управляющие запросы), создания подчиненных запросов.

При создании каждого запроса MS Access автоматически  составляет эквивалентную ему инструкцию SQL. Изменения, внесенные в инструкцию SQL, автоматически отражаются в бланке конструктора.

В простейшей форме эта команда занимается поиском информации в таблице. Она  имеет следующий формат:

SELECT field1, field 2, …

FROM Table;

Здесь field1, field 2,… – список столбцов таблицы Table, которые должны быть представлены в результате запроса.

Для получения  всей таблицы вместо списка столбцов необходимо поставить символ «*» (звездочка).

Команда SELECT имеет следующие параметры:

A. DISTINCT (получить список без повторений)

Формат: SELECT DISTINCT field1, field2, …

FROM Table;

B. ALL (получить список со всеми повторениями)

Формат: SELECT ALL field1, field2, …

FROM Table;

C. WHERE (извлечь нужные строки)

Формат: SELECT field1, field2, …

FROM Table WHERE predicate;

Здесь predicate –  логическое выражение, которое может  быть истинно или ложно для  каждой записи таблицы.

D. ORDER BY (рассортировать выходные данные)

Формат: SELECT field1, field2, …

FROM Table

ORDER BY field1 DESC;

Это означает, что выходные данные будут рассортированы по столбцу field1 в порядке убывания (порядок возрастания задается по умолчанию или с помощью слова ASC).

E. GROUP BY (группировать выходные данные)

Формат: SELECT field1, field2, …

FROM Table

GROUP BY [field1, field2, …]

ORDER BY field1 DESC;

Группировка – это объединение записей  в соответствии со значениями некоторого заданного поля.

 

 

Агрегатные функции

Существуют  следующие основные агрегатные функции:

  • Count – определение численности;
  • Sum – определение суммы;
  • First/Last – определение первого/последнего значения;
  • Min/Max – определение минимума/максимума;
  • Avg – определение среднего значения.

Для обозначения  связи двух таблиц дополнительно  к команде FROM используются атрибуты INNER JOIN и ON.

4. Запрос может  быть создан также только исключительно  через Режим SQL в конструкторе.

Выберем в  окне базы данных «Запрос», «Создать»  через опцию «Конструктор». В  диалоговом окне «Добавление таблицы» выберем опцию «Закрыть». В меню Вид выберите Режим SQL. Появится окно «Запрос на выборку». Наберем следующую инструкцию SQL:

Эта инструкция предназначена для получения  списков всех предметов и их кодов. Данные для этого запроса берутся  из таблицы «Предмет». Результатом  выполнения данного запроса будет  таблица, состоящая из двух полей (Наименование предмета и Код предмета) и из всех записей таблицы «Предмет».

Результат запроса  для получения списков всех предметов  и их кодов

Так как в  запросе используется только одна таблица, то нет необходимости указывать  поле с обозначением таблицы. Очевидно, что запрос выполняется на основании  таблицы «Предмет».

ОСНОВНОЙ КОД ПРОГРАММЫ

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.OleDb; // <- for database methods

 

namespace Sklad

{

    public partial class Form1 : Form

    {

        public OleDbConnection database;

        DataGridViewButtonColumn editButton;

        DataGridViewButtonColumn deleteButton;

        int movieIDInt;

 

        #region Form1 constructor

        public Form1()

        {

 

            InitializeComponent();

            // iniciate DB connection

            string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=skladdb.mdb";

            try

            {

 

                database = new OleDbConnection(connectionString);

                database.Open();

                //SQL query to list movies

                string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladType WHERE skladtype.typeID = sklad.typeID";

                loadDataGrid(queryString);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

                return;

            }

        }

        #endregion

 

        #region Load dataGrid

        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;

            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 = "Изменить";

            editButton.Text = "Изменить";

            editButton.UseColumnTextForButtonValue = true;

            editButton.Width = 80;

            dataGridView1.Columns.Add(editButton);

            // insert delete button to datagridview

            deleteButton = new DataGridViewButtonColumn();

            deleteButton.HeaderText = "Удалить";

            deleteButton.Text = "Удалить";

            deleteButton.UseColumnTextForButtonValue = true;

            deleteButton.Width = 80;

            dataGridView1.Columns.Add(deleteButton);

        }

        #endregion

 

        private void izlazToolStripMenuItem_Click(object sender, EventArgs e)

        {

            Close();

        }

       

        #region Close database connection

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        {

            database.Close();

        }

        #endregion

 

        #region refresh button

        private void button2_Click(object sender, EventArgs e)

        {

            textBox4.Clear();

            string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladtype WHERE skladtype.typeID = sklad.typeID";

            loadDataGrid(queryString);

        }

        #endregion

 

        #region Input

        private void button6_Click(object sender, EventArgs e)

        {

            string typeString;

            try

            {

                typeString = comboBox1.SelectedItem.ToString();

            }

            catch (Exception ex) {

                MessageBox.Show("Вы должны ввести категорию продукта\nError: " + ex.Message + "");

                return;

            }

            int type = 0;

            string name = textBox1.Text.ToString();

            string publisher = textBox2.Text.ToString();

            string year = textBox3.Text.ToString();

            int yr = 0;

            if (year != "")

            {

                yr = CheckYear(year);

            }

            string previewed;

            if (radioButton1.Checked == true)

            {

                previewed = "Да";

            }

            else

            {

                previewed = "Нет";

            }

            if (yr != 1)

            {

                if (typeString == "Бытовая химия") type = 1;

                if (typeString == "Продовольственные товары") type = 2;

                if (typeString == "Бытовая техника") type = 3;

                if (typeString == "Одежда") type = 4;

                if (typeString == "Хозяйственные товары") type = 5;

                if (typeString == "Мебель") type = 6;

                if (typeString == "Ткани") type = 7;

                if (typeString == "Стеклотовары") type = 8;

                if (typeString == "Автокосметика") type = 9;

                if (typeString == "Инструменты") type = 10;

                if (typeString == "Алкоголь") type = 11;

                if (typeString == "Табачные изделия") type = 12;

                if (typeString == "Офисная техника") type = 13;

                if (typeString == "Растения") type = 14;

                string SQLString ="";

    

                    if (year == "")

                    {

                        SQLString = "INSERT INTO sklad(Title, Publisher, Previewed, typeID) VALUES('" + name.Replace("'", "''") + "','" + publisher + "','" + previewed + "'," + type + ");";

                    }

                    else

                    {

                        MessageBox.Show(yr.ToString());

                        SQLString = "INSERT INTO sklad(Title, Publisher, Previewed, Years, typeID) VALUES('" + name.Replace("'", "''") + "','" + publisher + "','" + previewed + "'," + yr + "," + type + ");";

                    }

 

 

                OleDbCommand SQLCommand = new OleDbCommand();

                SQLCommand.CommandText = SQLString;

                SQLCommand.Connection = database;

                int response = -1;

                try

                {

                    response = SQLCommand.ExecuteNonQuery();

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                }

                if (response >= 1) MessageBox.Show("Товар успешно добавлен","Поздравления",MessageBoxButtons.OK, MessageBoxIcon.Information);

                textBox1.Clear();

                textBox2.Clear();

                textBox3.Clear();

                comboBox1.ResetText();

                radioButton1.Checked = radioButton2.Checked = false;

            }

            else

            {

                MessageBox.Show("Год введен некорректно!\nВведите год правильно.", "Осторожно",MessageBoxButtons.OK, MessageBoxIcon.Warning);

                textBox3.Clear();

                textBox3.Focus();

            }

        }

 

        public int CheckYear(string year)

        {

            int yr = int.Parse(year);

            if (yr >= 2100 || yr <= 1900)

            {

                return 1;

            }

            else

            {

                return yr;

            }

        }

 

        #endregion

 

        #region Delete/Edit button handling

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

        {

 

            string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladType WHERE skladtype.typeID = sklad.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();

                //runs form 2 for editing   

                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();

             

            }

            // delete button

            else if (dataGridView1.Columns[e.ColumnIndex] == deleteButton && currentRow >= 0)

            {

                // delete sql query

                string queryDeleteString = "DELETE FROM sklad where ID = "+movieIDInt+"";

                OleDbCommand sqlDelete = new OleDbCommand();

                sqlDelete.CommandText = queryDeleteString;

                sqlDelete.Connection = database;

                sqlDelete.ExecuteNonQuery();

                loadDataGrid(queryString);

            }

            

         }

        #endregion

        

        private void Form1_Load(object sender, EventArgs e)

        {

 

        }

 

        #region search by title

        private void button1_Click(object sender, EventArgs e)

        {

            string title = textBox4.Text.ToString();

            if (title != "")

            {

                string queryString = "SELECT ID, Title, Publisher, Previewed, Years, Type FROM sklad,skladtype WHERE skladtype.typeID = sklad.typeID AND sklad.title LIKE '" + title + "%'";

                loadDataGrid(queryString);

            }

            else

            {

                MessageBox.Show("Вы должны ввести название продукта","Осторожно",MessageBoxButtons.OK,MessageBoxIcon.Warning);

            }

        }

        #endregion

 

        #region search by type

        private void button5_Click(object sender, EventArgs e)

        {

            int type = 0;

            string typeString = comboBox2.SelectedItem.ToString();

Информация о работе База данных под управлением клиента C#