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

sql server+c++

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

Ключове слово WITH вказує на присутність додаткових опцій. Параметр FILLFACTOR задає значення фактору заповнення лист-

кового рівня індексу (за замовчуванням – 0, тобто повне заповнення). Параметр PAD_INDEX зі значенням ON застосовує значення проценту вільного місця, визначеного у параметрі FILLFACTOR, для

заповнення сторінок проміжного рівня індексу.

Параметр IGNORE_DUP_KEY визначає реакцію на помилку, що виникає при дублюванні значень ключа під час додавання декількох стрічок в унікальний індекс. При значенні ON стрічки, що не дублюють значення індексу, вставляються в таблицю, а дублюючі – відкидаються, але загалом транзакція проходить успішно (сервер видає лише повідомлення). При значенні OFF – сервер видає помилку, та скасовується уся транзакція.

Параметр STATISTICS_NORECOMPUTE вказує чи потрібно обновлювати статистику: ON – автоматичне обновлення статистики відключено, OFF – статистика обновлюється автоматично.

Параметр ALLOW_ROW_LOCKS вказує чи дозволене блокування стрічок: ON – блокування стрічок дозволене при звертанні до індексу, OFF – блокування стрічок не використовується.

Параметр ALLOW_PAGE_LOCKS вказує чи дозволене блокування сторінок: ON – блокування сторінок дозволене при звертанні до індексу, OFF – блокування сторінок не використовується.

Параметр SORT_IN_TEMPDB визначає чи дозволено зберігати тимчасові результати сортування в базі даних tempdb.

Параметр DROP_EXISTING дає можливість видалити існуючий індекс з таким же іменем та побудувати новий: ON – існуючий індекс знищується (не можна використовувати, якщо такий індекс не існує), OFF – генерується помилка, якщо існує індекс з таким же іменем.

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

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

Для попередньої таблиці Students створимо унікальний індекс на стовпцях Surname, Name та явно задамо порядок сортування за зростанням.

CREATE UNIQUE INDEX IXU_Students_Surname_Name

ON Students (Surname ASC, Name ASC)

WITH (FILLFACTOR = 70, PAD_INDEX = ON)

29

3.5. Додавання стрічок з даними у таблицю.

Для додавання нової стрічки з літеральними константами у таблицю використовується такий спрощений синтаксис:

INSERT [ INTO ]

[<ім’я бази> . [<ім’я схеми>] . | <ім’я схеми> . ] <ім’я таблиці> [ (<назва стовпця >) [ , ... n ] ]

VALUES ( { DEFAULT | NULL | <значення стовпця>} [ , ... n ] )

У такий спосіб за один раз оператором INSERT додається одна стрічка. Тобто, скільки треба вставити стрічок, стільки потрібно й операторів INSERT. Покажемо на прикладі таблиці Client можливі варіанти при додаванні нової стрічки.

Client

ID

int

NOT NULL

 

 

Surname

nchar(15)

NOT NULL

 

 

Country

nchar(15)

NULL

DEFAULT

'Україна'

City

nchar(10)

NULL

DEFAULT

'Львів'

Email

nvarchar(50) NULL

 

 

 

 

 

 

 

Рис.3.2. Структура таблиці Client

A. Додавання однієї повної стрічки у таблицю.

INSERT INTO Client VALUES (1, 'Павельчак', 'Україна', 'Львів', 'b@m.ua')

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

INSERT INTO Client (ID, Surname, Country, City, Email)

VALUES (2, 'Ющенко', 'Україна', 'Київ', NULL)

Якщо структура стовпця дозволяє не вводити конкретне значення, тоді замість значення можемо ввести null-значення.

INSERT INTO Client (Surname, City, Country, ID, Email)

VALUES ('Лукашенко', 'Мінськ', 'Білорусія', 3, NULL)

30

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

Б. Додавання частини стрічки у таблицю.

INSERT INTO Client (ID, Surname)

VALUES (4, 'Самотий')

У переліку стовпців може бути вказана лише частина стовпців. Тоді у переліку значень мають бути вказані лише відповідні для них значення. Решта значень визначаються за замовчуванням, тобто, якщо для стовпця є визначені значення за замовчуванням, тоді присвоюються ці значення, інакше, встановлюється null-значення (якщо null-значення є дозволені).

INSERT INTO Client

VALUES (5, 'Дзелендзяк', DEFAULT, DEFAULT, DEFAULT,)

Якщо у стрічку таблиці вставляється неповний набір даних, і при цьому відсутній список з іменами стовпців, тоді на місцях пропущених даних вписується ключове слово DEFAULT.

В. Додавання стрічки у таблицю, що має автоінкрементне поле.

Student

ID

int

IDENTITY (1,1)

Surname

nchar(10)

NULL

Name

nchar(10)

NULL

 

 

 

 

Рис.3.3. Структура таблиці Student

INSERT INTO Student VALUES ('Цюпа', 'Роман')

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

31

4. Розроблення клієнтської частини на основі ADO.NET 2.0

4.1. Структура моделі ADO.NET.

Модель ADO.NET є складовою частиною платформи Microsoft

.NET Framework. Тому клієнтську програму розробляють з використанням високорівневих мов C++/CLI, C#, Visual Basic на основі бібліотеки класів .NET Framework, а сама програма виконується в CLRсередовищі. Модель ADO.NET забезпечує взаємодію з різними системами керування базами даних, шляхом використання відповідних їм провайдерів (постачальників даних).

 

 

 

ADO.NET

 

 

DataSet

 

SQL Server

MS SQL Server

 

 

 

 

 

 

провайдер

 

 

 

СКБД

ID

int

 

 

Name

char

 

 

Surname char

 

 

IDg (FK) int

 

Oracle

 

 

 

 

Oracle

 

IDg

int

провайдер

 

Group

char

 

СКБД

 

 

 

 

 

 

 

OleDb

OleDb-сумісна

Програма-клієнт

 

провайдер

 

СКБД

 

 

 

 

 

 

 

 

 

ODBC

ODBC-сумісна

 

 

 

провайдер

 

 

 

СКБД

8

 

 

 

 

 

 

 

Рис. 4.1. Структура організації взаємодії клієнта з СКБД

Модель ADO.NET умовно поділяється на дві групи об’єктів: під’єднані та від’єднані (на рис. 4.1 вони розділені вертикальною штриховою лінією). Під’єднані об’єкти, що представляють відповідний провайдер, безпосередньо взаємодіють з БД та використовуються для керування з’єднанням, транзакціями, для вибірки даних та передачі відповідних змін у БД. Від’єднані об’єкти дають можливість працювати з даними автономно і від вибору провайдера не залежать. Мостиком між цими двома групами об’єктів є об’єкт DataAdapter.

32

Кожен провайдер реалізує однакові базові класи, які відрізняються лише префіксами: Sql, Oracle, OleDb, Odbc. Наприклад, для Sql Client .NET Data Provider це такі:

SqlConnection

З’єднує програму з базою даних SQL

 

Server.

SqlConnectionStingBuilder

Клас конструктора стрічок підключення

 

для об’єктів SqlConnection.

SqlCommand

Представляє SQL-оператор чи збережувану

 

процедуру для виконання через поточне

 

з’єднання SqlConnection.

SqlParameter

Представляє параметр, що використовуєть-

 

ся об’єктом SqlCommand.

SqlDataReader

Дає програмі доступ до даних у режимі

 

послідовного читання.

SqlTransaction

Керує транзакціями в базі даних.

SqlDataAdapter

Використовує об’єкт SqlCommand для

 

переміщення даних між базою даних та

 

об’єктами DataSet.

* Дані класи розміщуються в просторі імен System::Data::SqlClient .

Клас SqlConnection представляє з’єднання з джерелом даних. За допомогою властивостей цього об’єкта можна задати тип джерела, його розташування та інші атрибути. Об’єкт SqlConnection застосовується для з’єднання з БД та від’єднання від неї. Він виступає в якості каналу, по якому інші класи, наприклад SqlDataAdapter та SqlCommand, взаємодіють з БД для передачі змін та вибірки їхніх результатів. Його найважливішим параметром є ConnectionString (стрічка підключення).

Стрічка підключення складається з набору пар ім’я-підклю- чення, розділених за допомогою крапки з комою. Її параметри та значення залежать від того, з яким джерелом даних необхідно з’єднатися, а також за допомогою якої технології виконується з’єднання.

Наприклад, при використанні доступу до БД за допомогою інтегрованої безпеки Windows Authentication стрічка виглядатиме так:

Data Source = .\SQLEXPRESS; Initial Catalog = KSA;

Integrated Security = True

33

Параметр Data Source визначає ім’я сервера та складається з двох частин, розділених зворотною косою рискою. Зліва вказується ім’я комп’ютера, справа – назва іменованої копії SQL Server 2005. Ім’я локальної машини можна задати за допомогою спеціальних значень

(local), localhost або . (крапка).

Параметр Initial Catalog визначає назву бази даних на сервері. Параметр Integrated Security вказує, що у стрічці підключення

використовується інтегрована безпека.

Якщо необхідно використовувати доступ до сервера за паролем, тоді стрічка виглядатиме так:

Data Source = .\SQLEXPRESS; Initial Catalog = KSA;

User ID = sa; Password = 1

де параметр User ID визначає логін користувача на сервері, а Password визначає пароль доступу.

Перелік деяких параметрів стрічки підключення.

Data Source

-або -

Server

-або -

Address

-або -

Addr

Initial Catalog

- або -

Ім’я чи мережева адреса екземпляра SQL Server, до якого здійснюється підключення.

Ім’я бази даних.

Database

Integrated Security

- або -

Trusted_Connection User ID

Password

- або -

Pwd

Connect Timeout

- або -

Connection Timeout

Дозвіл на використання інтегрованої схеми безпеки доступу до БД (за замовчуванням – false).

Логін користувача SQL Server.

Пароль доступу до SQL Server, згідно вказаного логіна користувача. Не рекомендується використовувати разом з параметром

Integrated Security = True

Тривалість (в сек) очікування з’єднання зі сервером, після чого генерується помилка (за замовчуванням – 15 сек).

34

Encrypt

Визначає, чи канал обміну даними між клієнтом

 

та сервером буде шифруватися (за замовчуван-

 

ням – false).

Max Pool Size

Визначає максимальну кількість дозволених

 

з’єднань у пулі (за замовчуванням – 100).

Min Pool Size

Визначає мінімальну кількість з’єднань у пулі

 

(за замовчуванням – 0).

Pooling

Вказує, що з’єднання слід вибрати з пулу, якщо

 

воно там існує (за замовчуванням – true).

 

 

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

Connection містить назву об’єкта SqlConnection, за допомогою якого відбувається з’єднання з базою даних;

CommandText містить стрічку з SQL-запитом.

Об’єкти SqlCommand підтримують параметризовані запити. Це дає можливість користувачу задавати значення параметрів для запитів безпосередньо в програмі, і водночас запобігає некоректних вставлень у SQL-запити. Позначаються параметри символом «at» (@).

SELECT * FROM Students WHERE ID = @ID

Параметри можуть використовуватися як для передачі значень у БД, так і отримання їх звідтіль. Для виконання параметризованого запиту в об’єктній моделі ADO.NET необхідний параметр SqlParameter має бути доданим у колекцію Parameters об’єкта SqlCommand.

Клас SqlDataAdapter виконує роль моста між з’єднаними та від’єднаними рівнями об’єктної моделі ADO.NET. За допомогою об’єкта SqlDataAdapter вдається перемістити дані з БД в об’єкт DataSet, а також прийняти обновлення з кешу DataSet та передати в БД (рис. 4.2).

Об’єкт DataSet

 

Адаптер даних

База даних

 

 

 

 

Рис. 4.2. Адаптер даних у ролі моста між БД та DataSet

35

Об’єкт DataSet представляє собою реляційну програмну модель бази даних, що розміщується в оперативній пам’яті. Клас DataSet складається з колекцій таблиць DataTable, які можуть бути зв’язані між собою за допомогою об’єктів класу DataRelation. Крім того, для забезпечення цілісності даних у класі DataSet можуть бути викорис-

тані об’єкти UniqueConstraint та ForeignKeyConstraint.

Для полегшення роботи з об’єктами DataSet у середовищі .NET Framework передбачено генерування строго типізованих DataSet на основі XML-схеми. Цей клас генерується на основі звичайного DataSet і має вдосконалені властивості та методи, які визначаються XML-схемою. Зазначимо, що для роботи зі строго типізованими

DataSet, необхідно писати XSD-схеми (XML Schema Definition). У

більшості випадках Visual Studio дає можливість дуже легко створювати строго типізовані об’єкти DataSet та автоматично генерувати для них XSD-схеми. Однак, при внесенні змін у БД необхідно перебудовувати XSD-схему.

Далі у прикладі ми проілюструємо процес створення клієнтської програми з використанням строго типізованого об’єкта DataSet.

4.2. Модель БД для розроблюваного прикладу клієнта.

Для ілюстрації прикладу розроблення клієнтської програми ми створимо на локальному сервері базу даних KSA з такою структурою:

Рис. 4.3. Структура бази даних KSA

36

4.3. Проектування клієнта.

4.3.1. Новий проект + XSD-схема бази даних.

У середовищі Visual Studio 2005 створимо новий CLR-проект програми Windows Forms під назвою «KSA» (див. інструкцію [16]).

Далі, скориставшись функціями доступу до даних Visual Studio, додамо нове джерело даних. Для цього виберемо пункт меню Data Add New Data Sourse (рис. 4.4).

1

Рис. 4.4. Додавання нового джерела даних у Visual Studio 2005

У першому вікні майстра (рис. 4.5) з’явиться запитання, який тип даних слід створити. Виберіть елемент Database та натисніть кнопку Next.

2

3

Рис. 4.5. Додавання нового джерела даних у Visual Studio 2005

На наступному кроці майстер Data Source Configuration запропонує вибрати тип підключення до бази даних. Якщо раніше у Visual

37

Studio вже здійснювалися підключення до баз даних, то ці підключення будуть відображені у переліку, і можна буде скористатися одним із них. У нашому випадку, ми створимо нове підключення і для цього натиснемо кнопку New Connection… (рис. 4.6).

4

Рис. 4.6. Вибір підключення

Поверх попереднього з’явиться діалогове вікно Add Connection

5

6

7

 

8

9

 

Рис. 4.7. Вибір з’єднання з локальним екземпляром SQL Server

38

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