Створимо просте додаток баз даних, яке виводить на екранну форму інформацію з таблиці «Туристи» і пов'язану з поточним записом таблиці «Туристи» запис таблиці «Інформація про туристів» з бази даних Microsoft Access.

Для цього створимо порожнє Windows-додаток. Зовнішній вигляд середовища

розробки наведено на малюнку 39.

Рис. 39. Пусте додаток

На малюнку 39 виділена група компонентів «Дані» ( «Data»), яка містить компоненти для доступу до даних і маніпулювання ними.

Прив'язку даних БД до форми здійснює компонент «Binding Source». Перенесемо його на форму. Після розміщення його на формі середовище розробки приймає наступний вигляд (рис. 40).

Рис. 40. Компонент Binding Source на формі

Компонент є не візуальним, тому він відображається на додатковій панелі. Основною властивістю компонента є властивість DataSource, яке вказує на джерело даних. За замовчуванням властивість є порожнім, тому необхідно сформувати його значення. При виборі даної властивості у вікні властивостей з'являється наступне вікно (рис. 41).

Рис. 41. Список джерел даних

На даний момент список порожній, тому необхідно створити нове джерело даних, вибравши команду «Add Project Data Source» для створення нового джерела даних і з'єднання з ним. З'являється наступне вікно діалогу (мал. 42).

Рис. 42. Список джерел даних

Даний діалог надає наступний вибір джерел даних:

Database - База даних;

Service - Служба, це деякий сервіс, що надає дані. Найчастіше це Web-сервіс;

Object - Об'єкт для вибору об'єкта, який буде генерувати дані і об'єкти для роботи з ними.

У нашому випадку необхідно вибрати пункт «База даних» ( «Database»). З'являється вікно вибору з'єднання з даними (рис. 43).

Рис. 43. Вибір з'єднання з даними

Метою даного діалогу є створення рядка з'єднання, в якій будуть описані параметри з'єднання для механізму ADO, такі як тип бази даних, її місцезнаходження, імена користувачів, засоби безпеки та ін.

У випадаючому списку діалогу знаходяться всі створювані раніше з'єднання. Якщо необхідного з'єднання в списку немає, то слід використовувати кнопку «Створити підключення» ( «New connection»). Натискання кнопки призводить до появи наступного діалогу (рис. 44).

В даному діалозі вибирається тип джерела даних (в даному випадку Microsoft Access), ім'я бази даних (в даному випадку ім'я та місце розташування файлу бази даних), ім'я користувача і пароль, які використовуються для підключення до бази даних. Кнопка «Додатково» ( «Advanced») дозволяє задати велику кількість параметрів, що відносяться до різних деталей механізму ADO. Використання кнопки «Перевірити підключення» ( «Test Connection») дозволить переконатися в правильності введених параметрів і працездатності з'єднання.

Рис. 44. Створення нового з'єднання

Останній крок діалогу - вибір тих таблиць чи інших об'єктів бази даних, які необхідні в даному джерелі даних. Вікно вибору представлено на малюнку 45.

Рис. 45. Вибір необхідних таблиць

В даному вікні обрані таблиці «Туристи» та «Інформація про туристів». Оскільки інших об'єктів, крім таблиць, в базі даних не було створено, на малюнку 45 показані таблиці. На цьому створення джерела даних завершено. Після натискання кнопки «Готово» ( «Finish») поряд з компонентом BindingSource на формі з'являється компонент DataSet.

Тепер дані, підключені вище, необхідно відобразити на формі. Найпростішим способом відображення даних є використання компонента DataGridView з групи компонентів Data. Компонент є візуальним і на формі виглядає наступним чином (рис. 46).

Рис. 46. \u200b\u200bКомпонент DataGridView

Відразу ж виникає вікно настройки компонента, що визначає його можливості по редагуванню даних: «Включити редагування» ( «Enable Adding»), «Включити правку» ( «Enable Editing»), «Включити видалення» ( «Enable Deleting»); можливість зміни послідовності стовпців: «Включити можливість зміни порядку стовпців» ( «Enable Column Reordering»); а також можливість закріплення в контейнері-батьку.

Для того щоб компонент міг відображати дані, необхідно вибрати джерело даних в випадаючому списку. Вибір списку призводить до появи наступного діалогу (рис. 47).

Рис. 47. Вибір джерела даних для DataGridView

В даному випадку ми вибрали в якості джерела даних таблицю «Туристи». Даний вибір змінює екранну форму наступним чином (рис. 48).

Рис. 48. Компонент DataGridView відображає структуру таблиці

На малюнку видно, що з'явився ще один компонент BindingSource і компонент TableAdapter, що працює з таблицею «Туристи». Зверніть увагу, що в design-time або в процесі розробки дані з таблиці не відображаються.

Тепер необхідно відобразити дані з пов'язаної таблиці «Інформація про туристів». Для цього розмістимо на формі ще один компонент DataGridView і як джерело даних виберемо наступне (рис. 49).

Рис. 49. Вибір джерела даних для другого DataGridView

Тут в якості джерела даних виступає не сама таблиця «Інформація про туристів», а зв'язок (Binding Source) між таблицями «Туристи» та «Інформація про туристів». Такий вибір гарантує вибір з таблиці «Інформація про туристів» тільки тих рядків, які пов'язані з поточним рядком в таблиці «Туристи». Також такий вибір гарантує правильність оновлення та видалення пов'язаних даних. Робота отриманого програми показана на малюнку 50.

Рис. 50. Додаток бази даних в роботі

Переміщення за даними за допомогою стрілочних клавіш є незручним. Для спрощення навігації за даними існує компонент BindingNavigator. Помістимо його на формі (рис. 51).

Рис. 51. Компонент BindingNavigator на формі

Даний компонент дозволяє здійснювати навігацію між записами таблиці, додавати і видаляти рядки таблиці. Можливості і зовнішній вигляд компонента можна налаштовувати, так як він є смугою меню ToolStripContainer.

Властивістю, що визначає таблицю, по якій проводиться навігація, є властивість BindingSource. Встановимо значення цієї властивості рівним «турістиBindingSource». В роботі компонент виглядає наступним чином (рис. 52).

Рис. 52. Компонент BindingNavigator в роботі

Редагування даних в осередках компонента DataGridView при відповідних настройках можливо, але незручно і не раціонально. Зокрема, важко перевіряти введені значення на помилки. Тому для таблиці «Туристи» зробимо екранну форму, що дозволяє відображати дані в компонентах TextBox і редагувати їх. Для цього розмістимо на формі контейнер типу Panel, а на ньому три компонента TextBox наступним чином (рис. 53).

Рис. 53. Екранна панель для редагування записів таблиці «Туристи»

Тепер необхідно здійснити прив'язку компонентів TextBox до відповідних полях таблиці «Туристи». Для цього використовуємо властивість з групи DataBindings - Advanced, показане на малюнку 54.

Рис. 54. Властивість «DataBindings - Advanced»

Вибір даного властивості призводить до появи діалогу, показаного на малюнку 55. Даний діалог дозволяє здійснити не тільки прив'язку даних, але також задати подія, в рамках якого буде проводитися оновлення даних, а також форматування даних при їх виведенні.

Для верхнього компонента TextBox в випадаючому списку Binding виберемо джерелом даних «турістиBmdmgSource» і поле джерела - «Прізвище». Для середнього і нижнього компонентів TextBox виберемо той же джерело даних і поля «Ім'я» і «батькові» відповідно.

Розроблене додаток в роботі виглядає наступним чином (рис. 56).

Рис. 55. Вікно діалогу для властивості «DataBindings - Advanced»

Рис. 56. Прив'язка даних до візуальних компонентів

Однак при внесенні змін все нові дані залишаються тільки на формі. У базі даних вони не зберігаються, і при повторному виклику додатка, звичайно ж, будуть відсутні. Це відбувається тому, що дані були завантажені в об'єкт DataSet, який представляє собою копію таблиці в пам'яті. Всі дії виконуються з цією копією. Для того щоб зміни відобразилися в базі даних, необхідно виконати метод Update класу TableAdapter. Таким чином, в додатку, що розробляється необхідно розмістити кнопку «Оновити» та записати в обробник події Click наступний програмний код:

турістиTableAdapteгUpdate (bDTur_firmDataSet); інформація_о_турістахTableAdapter.Update (bDTur_firmDataSet);

Даний код оновлює інформацію в таблицях «Туристи» та «Інформація про туристів», що надаються джерелом даних. Відзначимо, що даний метод є перевантаженим, і його варіанти дозволяють оновлювати як окремий рядок таблиці, так і групу рядків.

DEVELOPMENT OF AN APPLICATION FOR WORKING WITH DATABASES

Roza Gaynanova

lecturer of the Department of General Educational Disciplines

Kazan national research Technological University

Russia, Kazan

АНОТАЦІЯ

У статті розглядаються методи доступу до баз даних і застосовуються в цих методах доступу програмні інтерфейси. Розглядається інтеграція додатків Visual C # з сервером СУБД Microsoft SQL Server 2012. Як приклад розглядається розробка інформаційної системи «Туристичне агентство».

ABSTRACT

The article examines the methods of access to databases and the software interfaces used in these access methods. We consider the integration of Visual C # applications with the Microsoft SQL Server 2012 database server. As an example the development of the "Tourist Agency" information system is considered.

Ключові слова: база даних, SQL Server, додаток, користувачі, елемент управління, запит.

Keywords: database, SQL Server, application, users, control element, query.

Інформаційна система - це взаємозв'язана сукупність засобів, методів і персоналу, використовуваних для зберігання, обробки та видачі інформації в інтересах досягнення поставленої мети. Розробляється інформаційна система буде побудована за технологією клієнт-сервер. У таких системах інформація зберігається на сервері, а інтерфейс інформаційної системи зберігається на клієнтських комп'ютерах, через нього користувачі інформаційної системи отримують доступ до даних.

При розробці інформаційної системи доводиться вирішувати дві основні задачі:

  • завдання розробки бази даних, призначеної для зберігання інформації;
  • завдання розробки графічного інтерфейсу користувача клієнтських додатків.

База даних «Турагентство» створюється на Microsoft SQL Server 2012. У базі даних зберігається інформація про клієнтів даного турагентства (туристах), про пропоновані їм турах, про оформлення та оплату путівок. На етапі проектування БД створюються таблиці «Туристи», «Тури», «Путівки», «Сезони», «Оплата». Встановлюються зв'язки між таблицями.

Додатком турагентства будуть користуватися керівник турагентства, менеджери з продажу, бухгалтер, касир і офісні співробітники турагентства. Один з офісних співробітників призначається системним адміністратором. Тільки він буде вести облікові записи користувачів. Крім п'яти основних таблиць створюється таблиця «Користувачі», яка містить інформацію про користувачів БД. Ця таблиця не пов'язана з іншими таблицями. Структура цієї таблиці: код користувача, прізвище, посаду, логін і пароль. Вносити зміни в цю таблицю може тільки системний адміністратор.

Система безпеки SQL Server будується на основі двох концепцій: аутентифікації і авторизації. Системний адміністратор, який відповідає за безпеку SQL Server, створює для кожного користувача окремий об'єкт login. Цей об'єкт містить ім'я облікового запису користувача SQL Server, його пароль, повне ім'я та інші атрибути, призначені для управління доступом до баз даних SQL Server. Підключившись до SQL Server, користувач отримує доступ до тих баз даних, в яких зареєстрований його обліковий запис. Для того щоб зареєструвати обліковий запис в конкретній базі даних, системний адміністратор створює в ній своє ім'я користувача бази даних і пов'язує її з певною обліковим записом. Системний адміністратор наділяє користувачів певними повноваженнями. Менеджер з продажу може вносити зміни в таблиці «Туристи», «Путівки» і змінювати стовпець «Колічество_мест» в таблиці «Тури» після продажу чергової путівки. Співробітник турагентства може вносити зміни в таблиці «Сезони» і «Тури». Бухгалтер і касир - в таблицю «Оплата».

Надання повноважень можна здійснювати в середовищі SQL Server Management Studio відкривши вікна властивостей відповідного користувача. Уявити повноваження можна і за допомогою інструкції GRANT. Приклади надання повноважень менеджеру. Наступна інструкція надає право користувачу Menedger переглядати, змінювати таблицю «Туристи», вставляти нові рядки і видаляти застарілі дані.

USE Турагентство

GRANT SELECT, UPDATE, INSERT, DELETE

ON Туристи

Аналогічна інструкція створюється для роботи з таблицею «Путівки». Щоб надати менеджеру право змінювати тільки один стовпець таблиці «Тури» після імені таблиці в дужках вказується ім'я змінюваного стовпчика Тури (Колічество_мест). Надані операції SELECT, UPDATE.

У мові управління даними (Data Control Language - DCL) існують чотири інструкції: COMMIT (завершити), ROLLBACK (відкотити), GRANT (надати), REVOKE (відкликати). Всі ці інструкції пов'язані із захистом бази даних від випадкового або навмисного пошкодження. Бази даних уразливі саме тоді, коли в них вносять зміни. Для захисту бази даних в SQL передбачено обмеження операцій. Які можуть її змінити, так що вони виконуються тільки в межах транзакцій. При спробі декількох користувачів одночасно використовувати одну і ту ж таблицю бази даних, створюється ситуація конкурентного доступу. Проблеми, пов'язані з одночасним доступом, виникають навіть у відносно простих додатках, якщо програма встановлена \u200b\u200bі запущено в багато користувачів, у якій в недостатній мірі забезпечено управління одночасним доступом. Конфлікт транзакцій не виникає, якщо вони виконуються послідовно.

Одним з головних інструментів підтримки цілісності бази даних є транзакція. Транзакція инкапсулирует все SQL-інструкції, які можуть впливати на базу даних. Транзакція SQL завершується однією з двох інструкцій: COMMIT (завершити) або ROLLBACK (відкотити). Якщо транзакція завершується інструкцією ROLLBACK, то скасовуються всі її інструкції, база даних повертається в початковий стан. Звичайна транзакція може виконуватися в одному з двох режимів: READ-WRITE (читання-запис) або READ-ONLY (тільки читання). Для транзакції можна задати один з наступних рівнів ізоляції: SERIAIZABLE (послідовне виконання), REPEATABLE READ (повторюване читання), READ UNCOMMITED (читання непідтверджених даних). За замовчуванням діють характеристики READ-WRITE і SERIAIZABLE. Діючі за замовчуванням характеристики транзакції SQL, зазвичай підходять для більшості користувачів.

Додаток створюється в середовищі Visual Studio 2012 із використанням мови програмування C #. Проектування програмного продукту починається з розробки інтерфейсу користувача.

Головне вікно програми має викликати основні функції для роботи з додатком (рисунок 1). Для виконання цих операцій використовується меню. Меню складається з наступних пунктів: «Таблиці», «Запити», «Звіти». Кожен з цих пунктів містить підпункти. Кожна функція буде виконуватися в своєму вікні. На головному вікні програми встановлюється елемент MenuStrip, формуються опції меню. На вікні форми розміщується елемент PictureBox. В область елемента завантажується малюнок. Малюнок повинен займати всю область. Властивість SizeMode встановлює масштабування малюнка. Для цього властивості із списку вибирається StretchImage, малюнок масштабується так, що він займає всю поверхню об'єкта.

Для відображення списку користувачів, які мають право працювати з базою даних «Турагентство» встановлюється елемент управління comboBox. Елемент comboBox прив'язується до джерела даних. Відкривається вікно « ЗomboBox завдання», В якому встановлюється прапорець« Використовувати елементи прив'язані до даних », якщо цей прапорець встановлений відкриваються параметри прив'язки даних. Елемент comboBox прив'язується до таблиці «Користувачі», в рядку «Показати члена» вибирається «Прізвище». Для введення логіна встановлюється елемент управління textbox1, для введення пароля textBox2. Для елементів textBox1 і textBox2 Властивості UsesSystemPasworChar встановлюється в true, яке вказує, чи повинен текст в текстовому полі відображатися символами пароля за замовчуванням. Встановлюються дві командні кнопки «Увійти» і «Змінити користувача».

При прив'язуванні елемента comboBox до таблиці «Користувачі», в програмному коді форми з'являється обробник події Form1_Load.

private void Form1_Load (object sender, EventArgs e)

this.пользователіTableAdapter1.Fill (this.турагентствоDataSet10.Пользователі);

При запуску програми меню поза зоною досяжності. Щоб увійти в систему треба ввести дані про користувача і натиснути кнопку «Увійти». При завантаженні форми прізвища користувачів, що містяться в таблиці «Користувачі» завантажуються в елемент управління comboBox1. В цей обробник додаються рядки, які роблять недоступними меню, кнопку «Змінити користувача» і в елементі comboBox1 жоден елемент не обраним:

menuStrip1.Enabled \u003d false; comboBox1.SelectedIndex \u003d -1;

button2.Enabled \u003d false;

Малюнок 1. Вид головного вікна програми

При натисканні кнопки «Увійти» перевіряється, мається на таблиці «Користувачі», користувач, з даної прізвищем, і чи правильно введені логін і пароль. В області опису класу форми описуються параметри, що передаються в sql команду. Це три параметра: прізвище користувача, його логін і пароль.

private string parfam, parpasw, parlog;

В простір імен додається рядок:

using System.Data.SqlClient;

// Обробник події натискання кнопки «Увійти»

string sql \u003d "";

string connstr \u003d @ "Data Source \u003d B302CN-8 \\ TEST_SQL; Initial Catalog \u003d Турагентство; Integrated Security \u003d True";

SqlDataReader cmReader;

parfam \u003d comboBox1.Text; parlog \u003d textBox1.Text;

SqlConnection conn \u003d new SqlConnection (connstr);

sql \u003d "SELECT Прізвище, Ім'я, Пароль FROM Користувачі" +

"WHERE (Прізвище \u003d @fam) and (Пароль [Email protected])";

SqlCommand cmdkod \u003d new SqlCommand (sql, conn);

cmdkod.Parameters.Add (new SqlParameter ( "@ fam", SqlDbType.NChar, 25));

cmdkod.Parameters [ "@ fam"]. Value \u003d parfam;

cmdkod.Parameters.Add (new SqlParameter ( "@ pasw", SqlDbType.NChar, 10));

cmdkod.Parameters [ "@ pasw"]. Value \u003d parpasw;

cmdkod.Parameters.Add (new SqlParameter ( "@ log", SqlDbType.NChar, 15));

cmdkod.Parameters [ "@ log"]. Value \u003d parlog;

if (! cmReader.Read ())

MessageBox.Show ( "Неправильний пароль!");

cmReader.Close (); conn.Close ();

menuStrip1.Enabled \u003d true; comboBox1.SelectedIndex \u003d -1;

button1.Enabled \u003d false; button2.Enabled \u003d true;

textBox1.Text \u003d ""; textBox1.Enabled \u003d false;

textBox2.Text \u003d ""; textBox2.Enabled \u003d false;

comboBox1.Enabled \u003d false;

cmReader.Close ();

private void button2_Click (object sender, EventArgs e)

menuStrip1.Enabled \u003d false; comboBox1.Enabled \u003d true;

textBox1.Enabled \u003d true; textBox2.Enabled \u003d true;

button1.Enabled \u003d true; button2.Enabled \u003d false;

Опис роботи обробника події натискання кнопки «Увійти».

Рядок connstr містить рядок підключення. У рядку sql записується текст формованого запиту, починаючи з оператора select, після якого перераховуються обрані поля з таблиць, які вказані після слова from.

У обробнику створюється новий екземпляр об'єкта SqlConnection, який забезпечує підключення до сервера SQL. Об'єкт SqlCommand містить команду з трьома параметрами для пошуку в таблиці «Користувачі» користувача з даної прізвищем, ім'ям і паролем. Оброблювач button1_Click відкриває з'єднання SqlConnection. Далі обробник виконує SQL команду, що зберігається в об'єкті cmdkod.

cmReader \u003d cmdkod.ExecuteReader ();

В результаті виконання методу ExecuteReader створюється об'єкт класу SqlDataReader, який дозволяє послідовно прочитати всі рядки виконання команди SQL. Для вибірки використовується метод SqlDataReader. Read. Якщо таблиця «Користувачі» не містить жодного запису із заданою прізвищем, ім'ям і паролем, то метод cmReader.Read () поверне значення false. Це означає, що введені невірний логін або пароль. В цьому випадку видається повідомлення про невірних введених даних, закриваються об'єкти cmReader і SqlConnection. Якщо дані про користувача введені правильно, меню і кнопка «Змінити користувача» стають доступними. Кнопка «Увійти» стає недоступним. Елементи textBox1 і textBox2 очищаються і стають недоступними. Елемент comboBox1 також стає недоступним (рисунок 2)

Малюнок 2. Форма головного вікна після входу користувача в систему

Таблиці і результати виконання запитів будуть відображатися на елементах управління DataGridView. Головне призначення цих елементів - зв'язування з таблицями зовнішніх джерел даних, перш за все з таблицями баз даних. Для зручності перегляду і введення нових записів таблиці «Сезони», «Тури» і «Путівки», «Оплата» будуть відображатися по дві в одному вікні. Кожен елемент управління DataGridView зв'язується з відповідною таблицею бази даних «Турагентство». В даному вікні обрана таблиця «Туристи» (малюнок 3). Після завершення підключення (натискання кнопки «Готово») на формі з'являються компоненти DataSet, BindingSource і TableAdapter. Ці компоненти не є візуальними, тому вони відображається на додатковій панелі. DataSet - це спеціалізований об'єкт, що містить образ бази даних. Для здійснення взаємодії між DataSet і власне джерелом даних використовується об'єкт типу TableAdapter. Сама назва цього об'єкта - адаптер, перетворювач, - вказує на його природу. TableAdapter містить методи Fill і Update, які виконують пряму і зворотну передачу даних між набором DataSet і таблицею зберігається в базі даних SQL сервера. Метод Fiil наповнює набір DataSet даними з сервера SQL, а Update оновлює базу сервера SQL даними з локального набору DataSet. Компонент BindingSource спрощує прив'язку елементів управління у формі до даних. Основною властивістю компонента BindingSource є властивість Data Source, яке вказує на джерело даних.

Після завершення підключення таблиць до джерел даних в програмному коді форми з'являється обробник події Form2_Load.

private void Form2_Load (object sender, EventArgs e)

this.турістиTableAdapter.Fill (this.турагентствоDataSet9.Турісти);

При завантаженні форми дані, що містяться в таблиці «Туристи» відображаються на елементі управління DataGridView на вікні форми Form2. У таблицю можна вносити зміни і додавати нові записи. Після внесення змін натиснути на кнопку «Зберегти Туристи». Обробник події натискання кнопки «Зберегти Туристи»:

private void button1_Click (object sender, EventArgs e)

сезониTableAdapter.Update (турагентствоDataSet9);

MessageBox.Show ( "Дані збережені");

Малюнок 3. Вид вікна з таблицею «Туристи»

Кожен запит відображається на окремому вікні. На вікні Form1 в меню «Запити» додається новий пункт з ім'ям запиту. Якщо запит не має параметрів, для відображення результатів виконання запиту на вікні форми встановлюється елемент управління DataGridView і зв'язується з відповідною процедурою або функцією бази даних.

В даній статті наведені деякі методи розробки додатків, що працюють з базами даних, спосіб організації доступу до роботи з системою обмеженого кола осіб, способи інтеграції додатків Visual C # з сервером СУБД Microsoft SQL Server 2012. При спільному використанні мови програмування Visual C # з SQL можна створювати потужні додатки з широким набором можливостей. Основна сила SQL полягає в отриманні даних. Скільки б у не було рядків в таблиці їх можна витягти за допомогою єдиної інструкції SELECT. У той же час головним недоліком мови SQL є його недорозвинений інтерфейс користувача. За допомогою процедурних мов можна створювати зручні інтерфейси введення і перегляду даних. Найпоширеніший метод об'єднання SQL з процедурними мовами називається впровадженням коду SQL. Інструкція SQL вставляється в потрібне місце процедурної програми. Між програмою, написаної на процедурному мовою, і кодом SQL повинна передаватися інформація. Для цього використовуються базові змінні. Щоб SQL розпізнав ці змінні їх необхідно оголосити. Змінні оголошуються в області опису класу форми до опису програмного коду. У програмному коді створений новий екземпляр об'єкта SqlConnection забезпечує підключення до сервера SQL. Об'єкт SqlCommand забезпечує виконання впровадженої SQL команди.

Список літератури:

  1. Аллен Тейлор. SQL для чайников, 8-е видання .: Пер. з англ. - М .: ТОВ "І.Д. Вільямс ", 2014. - 416 с.
  2. Гайнанова Р.Ш. Розробка додатків для роботи з базами даних MS SQL Server 2012 // Фундаментальні та прикладні науки сьогодні: Матеріали XI міжнародної практичної конференції (10-11 квітня 2017р. Noth Charleston, USA), том 3 - c. 34-41.
  3. Фролов А.В., Фролов Г.В. Візуальне проектування додатків C #. - М .: КУДРІЦ-ОБРАЗ, 2003 - 512с.

Створимо просте додаток баз даних, яке виводить на екранну форму інформацію з таблиці «Туристи» і пов'язану з поточним записом таблиці «Туристи» запис таблиці «Інформація про туристів» з бази даних Microsoft Access.

Для цього створимо порожнє Windows-додаток. Зовнішній вигляд середовища

розробки наведено на малюнку 39.

Рис. 39. Пусте додаток

На малюнку 39 виділена група компонентів «Дані» ( «Data»), яка містить компоненти для доступу до даних і маніпулювання ними.

Прив'язку даних БД до форми здійснює компонент «Binding Source». Перенесемо його на форму. Після розміщення його на формі середовище розробки приймає наступний вигляд (рис. 40).

Рис. 40. Компонент Binding Source на формі

Компонент є не візуальним, тому він відображається на додатковій панелі. Основною властивістю компонента є властивість DataSource, яке вказує на джерело даних. За замовчуванням властивість є порожнім, тому необхідно сформувати його значення. При виборі даної властивості у вікні властивостей з'являється наступне вікно (рис. 41).

Рис. 41. Список джерел даних

На даний момент список порожній, тому необхідно створити нове джерело даних, вибравши команду «Add Project Data Source» для створення нового джерела даних і з'єднання з ним. З'являється наступне вікно діалогу (мал. 42).

Рис. 42. Список джерел даних

Даний діалог надає наступний вибір джерел даних:

Database - База даних;

Service - Служба, це деякий сервіс, що надає дані. Найчастіше це Web-сервіс;

Object - Об'єкт для вибору об'єкта, який буде генерувати дані і об'єкти для роботи з ними.

У нашому випадку необхідно вибрати пункт «База даних» ( «Database»). З'являється вікно вибору з'єднання з даними (рис. 43).

Рис. 43. Вибір з'єднання з даними

Метою даного діалогу є створення рядка з'єднання, в якій будуть описані параметри з'єднання для механізму ADO, такі як тип бази даних, її місцезнаходження, імена користувачів, засоби безпеки та ін.

У випадаючому списку діалогу знаходяться всі створювані раніше з'єднання. Якщо необхідного з'єднання в списку немає, то слід використовувати кнопку «Створити підключення» ( «New connection»). Натискання кнопки призводить до появи наступного діалогу (рис. 44).

В даному діалозі вибирається тип джерела даних (в даному випадку Microsoft Access), ім'я бази даних (в даному випадку ім'я та місце розташування файлу бази даних), ім'я користувача і пароль, які використовуються для підключення до бази даних. Кнопка «Додатково» ( «Advanced») дозволяє задати велику кількість параметрів, що відносяться до різних деталей механізму ADO. Використання кнопки «Перевірити підключення» ( «Test Connection») дозволить переконатися в правильності введених параметрів і працездатності з'єднання.

Рис. 44. Створення нового з'єднання

Останній крок діалогу - вибір тих таблиць чи інших об'єктів бази даних, які необхідні в даному джерелі даних. Вікно вибору представлено на малюнку 45.

Рис. 45. Вибір необхідних таблиць

В даному вікні обрані таблиці «Туристи» та «Інформація про туристів». Оскільки інших об'єктів, крім таблиць, в базі даних не було створено, на малюнку 45 показані таблиці. На цьому створення джерела даних завершено. Після натискання кнопки «Готово» ( «Finish») поряд з компонентом BindingSource на формі з'являється компонент DataSet.

Тепер дані, підключені вище, необхідно відобразити на формі. Найпростішим способом відображення даних є використання компонента DataGridView з групи компонентів Data. Компонент є візуальним і на формі виглядає наступним чином (рис. 46).

Рис. 46. \u200b\u200bКомпонент DataGridView

Відразу ж виникає вікно настройки компонента, що визначає його можливості по редагуванню даних: «Включити редагування» ( «Enable Adding»), «Включити правку» ( «Enable Editing»), «Включити видалення» ( «Enable Deleting»); можливість зміни послідовності стовпців: «Включити можливість зміни порядку стовпців» ( «Enable Column Reordering»); а також можливість закріплення в контейнері-батьку.

Для того щоб компонент міг відображати дані, необхідно вибрати джерело даних в випадаючому списку. Вибір списку призводить до появи наступного діалогу (рис. 47).

Рис. 47. Вибір джерела даних для DataGridView

В даному випадку ми вибрали в якості джерела даних таблицю «Туристи». Даний вибір змінює екранну форму наступним чином (рис. 48).

Рис. 48. Компонент DataGridView відображає структуру таблиці

На малюнку видно, що з'явився ще один компонент BindingSource і компонент TableAdapter, що працює з таблицею «Туристи». Зверніть увагу, що в design-time або в процесі розробки дані з таблиці не відображаються.

Тепер необхідно відобразити дані з пов'язаної таблиці «Інформація про туристів». Для цього розмістимо на формі ще один компонент DataGridView і як джерело даних виберемо наступне (рис. 49).

Рис. 49. Вибір джерела даних для другого DataGridView

Тут в якості джерела даних виступає не сама таблиця «Інформація про туристів», а зв'язок (Binding Source) між таблицями «Туристи» та «Інформація про туристів». Такий вибір гарантує вибір з таблиці «Інформація про туристів» тільки тих рядків, які пов'язані з поточним рядком в таблиці «Туристи». Також такий вибір гарантує правильність оновлення та видалення пов'язаних даних. Робота отриманого програми показана на малюнку 50.

Рис. 50. Додаток бази даних в роботі

Переміщення за даними за допомогою стрілочних клавіш є незручним. Для спрощення навігації за даними існує компонент BindingNavigator. Помістимо його на формі (рис. 51).

Рис. 51. Компонент BindingNavigator на формі

Даний компонент дозволяє здійснювати навігацію між записами таблиці, додавати і видаляти рядки таблиці. Можливості і зовнішній вигляд компонента можна налаштовувати, так як він є смугою меню ToolStripContainer.

Властивістю, що визначає таблицю, по якій проводиться навігація, є властивість BindingSource. Встановимо значення цієї властивості рівним «турістиBindingSource». В роботі компонент виглядає наступним чином (рис. 52).

Рис. 52. Компонент BindingNavigator в роботі

Редагування даних в осередках компонента DataGridView при відповідних настройках можливо, але незручно і не раціонально. Зокрема, важко перевіряти введені значення на помилки. Тому для таблиці «Туристи» зробимо екранну форму, що дозволяє відображати дані в компонентах TextBox і редагувати їх. Для цього розмістимо на формі контейнер типу Panel, а на ньому три компонента TextBox наступним чином (рис. 53).

Рис. 53. Екранна панель для редагування записів таблиці «Туристи»

Тепер необхідно здійснити прив'язку компонентів TextBox до відповідних полях таблиці «Туристи». Для цього використовуємо властивість з групи DataBindings - Advanced, показане на малюнку 54.

Рис. 54. Властивість «DataBindings - Advanced»

Вибір даного властивості призводить до появи діалогу, показаного на малюнку 55. Даний діалог дозволяє здійснити не тільки прив'язку даних, але також задати подія, в рамках якого буде проводитися оновлення даних, а також форматування даних при їх виведенні.

Для верхнього компонента TextBox в випадаючому списку Binding виберемо джерелом даних «турістиBmdmgSource» і поле джерела - «Прізвище». Для середнього і нижнього компонентів TextBox виберемо той же джерело даних і поля «Ім'я» і «батькові» відповідно.

Розроблене додаток в роботі виглядає наступним чином (рис. 56).

Рис. 55. Вікно діалогу для властивості «DataBindings - Advanced»

Рис. 56. Прив'язка даних до візуальних компонентів

Однак при внесенні змін все нові дані залишаються тільки на формі. У базі даних вони не зберігаються, і при повторному виклику додатка, звичайно ж, будуть відсутні. Це відбувається тому, що дані були завантажені в об'єкт DataSet, який представляє собою копію таблиці в пам'яті. Всі дії виконуються з цією копією. Для того щоб зміни відобразилися в базі даних, необхідно виконати метод Update класу TableAdapter. Таким чином, в додатку, що розробляється необхідно розмістити кнопку «Оновити» та записати в обробник події Click наступний програмний код:

турістиTableAdapteгUpdate (bDTur_firmDataSet); інформація_о_турістахTableAdapter.Update (bDTur_firmDataSet);

Даний код оновлює інформацію в таблицях «Туристи» та «Інформація про туристів», що надаються джерелом даних. Відзначимо, що даний метод є перевантаженим, і його варіанти дозволяють оновлювати як окремий рядок таблиці, так і групу рядків.