Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

sql server+c++

.pdf
Скачиваний:
18
Добавлен:
07.06.2015
Размер:
2.12 Mб
Скачать

У діалоговому вікні Add Connection ми повинні виконати у наступній послідовності такі пункти (рис. 4.7):

5.Перевірити вибране джерело даних. Для цього слід натиснути кнопку Change та у діалоговому вікні Change Data Source вибрати як джерело даних Microsoft SQL Server (рис. 4.8) та провайдера даних .NET Framework Data Provider for SQL Server.

6.Вказати назву локального сервера .\SQLEXPRESS .

7.Вибрати серед переліку назву бази даних KSA.

8.Перевірити працездатність налаштованого з’єднання.

9.Підтвердити вибрані налаштування для з’єднання.

a

b

Рис. 4.8. Вибір типу бази даних та провайдера Після цього попереднє вікно майстра знову стане активним.

10

11

Рис. 4.9. Результат генерування стрічки підключення

39

Розкрийте прихований текст для опції Connection string (рис. 4.9, п.10), щоб побачити згенеровану майстром стрічку підключення. Для продовження необхідно натиснути кнопку Next.

Далі майстер отримає структуру бази даних KSA зі серверу та запропонує вам вибрати об’єкти (таблиці, представлення, функції, збережувані процедури), які слід включити в нове джерело даних. Для нашого прикладу виберіть усі таблиці (п.12), як на рис. 4.10, та натисніть кнопку Finish (п. 13).

12

13

Рис. 4.10. Вибір таблиць з бази даних для нового об’єкта DataSet

У результаті дій майстра буде згенерована XSD-схема зі строго типізованим об’єктом DataSet. Для відображення структури DataSet двічі натисніть у вікні Solution Explorer елемент KSADataSet.xsd.

13

Рис. 4.11. Відкриття для перегляду XSD-схеми

40

У результаті буде відображена цілісна структура з таблицями та зв’язками між ними об’єкта DataSet (рис. 4.12).

Рис. 4.12. Строго типізований XSD-об’єкт DataSet

Кожна згенерована таблиця містить перелік стовпців з параметрами, що отримані з бази даних. Вибравши конкретний стовпець, у вкладці Properties можна переглянути його параметри (рис. 4.13).

Рис. 4.13. Вікно з властивостями стовпця таблиці

41

Аналогічно можна переглянути властивості кожного встановленого зв’язку між таблицями. Для цього слій вибрати цей зв’язок, натиснути праву клавішу миші та в контекстному меню вибрати пункт

Edit Relation (рис. 4.14).

14

15

16 17

Рис. 4.14. Вікно Relation

Об’єкт DataRelation має два важливих параметри:

Relation встановлює механізм для відображення зв’язаних даних у двох таблицях;

ForeignKeyConstraint накладає обмеження зовнішнього ключа на батьківську таблицю.

За замовчуванням для об’єктів DataRelation, що автоматично згенеровані середовищем Visual Studio, є встановлений лише параметр Relation. Тому рекомендують встановлювати режим Both Relation and Foreign Constraint та значення Cascade для правил Update Rule та Delete Rule, а для Accept/Reject Rule значення None (рис. 4.14).

Примітка: XSD-схему необхідно зберігати після кожного внесення корекцій до неї.

42

4.3.2. Налаштування автоінкрементних стовпців.

Для стовпців з автоінкрементними значеннями, що визначені архітектурою бази даних, в ADO.NET передбачені спеціальні функції для їх підтримки. Підтримка стовпців з автоінкрементом реалізується за допомогою таких трьох властивостей об’єкта DataColumn AutoIncrement, AutoIncrementSeed та AutoIncrementStep.

Для того, щоб модель ADO.NET генерувала для нових стрічок значення автоінкремента, параметр AutoIncrement повинен бути true. Після цього, за початкове значення береться те, яке визначене у параметрі AutoIncrementSeed, а в кожній доданій стрічці значення в стовпці зросте на величину, що вказана в параметрі AutoIncrementStep. Однак, нові значення стрічок також залежать і від тих, що отримані з бази даних, тобто, нові значення будуть генеруватися, відштовхуючись від максимального значення автоінкремента, наявного в таблиці.

Значення, що генеруються моделлю ADO.NET, виконують лише роль міток, і при передачі обновлень у базу даних будуть замінені на згенеровані сервером значення.

Примітка: для того, щоб користувач при роботі з програмоюклієнтом не сприйняв тимчасові мітки за справжні значення, настійно рекомендується генерувати від’ємні тимчасові значення автоінкремента. Для цього слід задати для параметрів AutoIncrementSeed та

AutoIncrementStep -1 (мінус один).

18

19 20

Рис. 4.15. Вікно параметрів автоінкрементного стовпця

Після налаштування усіх автоінкрементних стовпців необхідно зберегти XSD-схему .

43

4.3.3. Відображення однієї таблиці на формі програми.

Для уникнення помилок зв’язування для цього прикладу встановіть зв’язки на XSD-схемі у режим Relation Only (рис. 4.14).

Для розміщення елементів відображення даних перейдемо у режим дизайну форми. Далі виберемо вікно Data Sources. Якщо воно не активне, то його можна викликати командою з меню DataShow Data Sources (рис. 4.16, п.21).

21

22

23

24

Рис. 4.16. Робота з набором даних Data Sources

Вікно Data Sources відображає перелік наявних таблиць (п.22), стовпців (п.23) та реляційно зв’язаних таблиць (п.24) в об’єкті DataSet.

Для розміщення елементів відображення даних на формі необхідно просто перетягнути їх з вікна Data Sources на форму.

Перетягнемо мишею елемент Students (п.22) на форму.

Рис. 4.17. Дизайн форми для відображення одної таблиці

44

У результаті цієї простої дії на формі будуть розміщені усі елементи, які є необхідні для зчитування даних зі серверу, відображення їх у вигляді таблиці, а також і для наступного обновлення результатів у БД на сервері (рис. 4.17). Невізуальні об’єкти розміщуються знизу у розділі Components Tray. Усі додані компоненти мають префікс з іменем таблиці.

Панель керування

BindingNavigator

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Об’єкт

 

Об’єкт

 

Об’єкт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Елемент

 

 

 

 

База

 

 

керування

 

 

BindingSource

 

DataSet

 

DataAdapter

 

 

 

 

 

 

даних

 

 

DataGridView

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 4.18. «Конвеєр» переміщення даних між БД та DataGridView

Важливим елементом у цьому наборі є BindingSource. Він займає проміжний рівень між елементами відображення даних та об’єктом DataSet (рис. 4.18). Цей компонент дає можливість синхронно переміщуватися по стрічках таблиці об’єкта DataSet для усієї сукупності підключених елементів керування та відображення даних до цієї таблиці. Наприклад, користувач переглядає таблицю з даними, а в окремому елементі синхронно відображається графічне зображення з цієї таблиці. Це можливо, оскільки компонент BindingSource має курсор на поточний запис таблиці. Якщо якийсь з елементів керування змінює його значення, автоматично ця зміна розповсюджується на решта елементів керування та відображення даних.

Компонент BindingNavigator представляє собою панель керування записами таблиці. Він дає можливість переміщуватися по стрічках таблиці, додавати нові, видаляти стрічки, а також відображує інформацію про чисельний стан та номер поточної стрічки. Цей компонент взаємодіє з даними через компонент BindingSource.

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

Іконка з виглядом дискети генерується для навігатора майстром. Звичайні об’єкти BindingNavigator функції збереження даних не мають.

45

Внаслідок автоматизованих дій майстра наша проста програма є повністю готовою до компіляції і не потребує ніякого додаткового програмного коду. Весь необхідний код є доданий майстром. Проаналізуємо код двох функції для оброблення подій, що автоматично були додані майстром. Програмний код знаходиться у файлі Form1.h.

Перша частина коду додана майстром у функцію-обробник події, що настає під час завантаження форми.

private: System::Void Form1_Load (System::Object^ sender, System::EventArgs^ e) {

// TODO: This line of code loads data into the 'KSADataSet.Students' table. //You can move, or remove it, as needed. this->StudentsTableAdapter->Fill(this->KSADataSet->Students);

}

У цій функції викликається метод Fill() адаптера даних для заповнення таблиці Students даними з бази даних.

Друга функція – це обробник події натиснення іконки дискети на панелі навігатора для збереження даних у базі даних сервера.

private: System::Void StudentsBindingNavigatorSaveItem_Click (System::Object^ sender, System::EventArgs^ e) {

this->Validate(); this->StudentsBindingSource->EndEdit();

this->StudentsTableAdapter->Update(this->KSADataSet->Students);

}

Після виклику методу Validate() форма перевіряє достовірність даних. Метод EndEdit() об’єкта BindingSource приймає всі незавершені зміни даних елементів редагування. Метод Update() об’єкта TableAdapter передає у базу даних усі відкладені зміни, що були внесені у таблицю.

Графічний компонент DataGridView може бути відформатований у відповідності до ваших потреб. Для цього натисніть праву кнопку миші та виберіть у контекстному меню пункт Edit Columns.

25

46

Наприклад, ми хочемо перейменувати назви стовпців на аналогічні назви, але українською мовою. Для цього необхідно для кожного стовпця відредагувати параметр HeaderText (рис. 4.19).

26

Рис. 4.19. Редагування параметрів стовпців елементу DataGridView

Після цього налаштування можемо запускати на виконання

нашу Windows Forms програму . В результаті отримаємо графічне вікно, приблизно як на рис. 4.20.

Рис. 4.20. Програма-клієнт для відображення однієї таблиці

Дані таблиці можуть бути відображені не лише компонентою DataGridView, але й звичайними текстовими полями з мітками для відображення даних кожного стовпця окремо. У цьому випадку можемо перетягувати на форму кожен стовпець окремо, а можемо і перетягнути усю таблицю одразу. Для цього необхідно у вікні Data Sources справа від назви таблиці натиснути лівою клавішею миші на галочці та вибрати пункт Details (рис. 4.21).

47

28

27

Рис. 4.21. Розміщення деталізованого вигляду таблиці

Після цього слід перетягнути таблицю на форму (рис. 4.21). В результаті, дані розмістяться приблизно як на рис. 4.22.

Рис. 4.22. Програма-клієнт для атомарного відображення таблиці

4.3.4. Відображення на формі зв’язку «один до багатьох».

Зв’язок «один до багатьох» може реалізовувати такі концепції: А. Підтримка цілісності значень. Тобто, значення, які заносяться

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

Б. Реалізація реляційної схеми «головний-підлеглий». При такому варіанті у залежній таблиці відображаються лише ті стрічки, що відповідають встановленому зв’язку відносно активної стрічки в головній таблиці. Наприклад, перейшовши на запис певної групи, у другій таблиці відобразяться лише ті студенти, що належать цій групі.

Почнемо з розгляду першого варіанту, з деталізацією його реалізації у клієнтській програмі.

48

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]