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

ЛабРаб_ООП

.pdf
Скачиваний:
145
Добавлен:
27.05.2015
Размер:
1.37 Mб
Скачать

Form1 і додайте в нього звернення до методу SetStyle() відразу за зверненням до методу InitializeComponent(). SetStyle() – це функція класу Form. Видозмінений конструктор виглядатиме таким чином:

public Form1()

{

//

// Необхідно для підтримки Windows Form Designer

//

InitializeComponent(); SetStyle(ControlStyles.Opaque, true);

//Слід зробити. Будь-який код, що відноситься до конструктора

//повинен бути поміщений після виклику методу InitializeComponent().

}

Цей код змінює поведінку класу Form таким чином, що він автоматично не виконуватиме закрашення фону вікна. Якщо ми включаємо в код цей рядок, але не закрашуємо фон вікна самостійно, то яке б зображення не виявилося розташованим під даним вікном на момент його створення, воно залишатиметься видимим, що навряд чи може нас влаштувати.

У самий початок файлу ми включимо рядок з оператором using, оскільки в даному прикладі ми використовуватимемо клас LinearGradientBrush, який знаходиться в просторі імен Drawing2D. Після додавання директивою using простору імен Drawing2D, код прийме наступний вигляд:

using System;

using System.Drawing;

using System.Drawing.Drawing2D; using System.Collections;

using System.ComponentModel; using System.Windows.Forms; using System.Data;

Тепер необхідно додати до нашого класу метод OnPaint():

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics; g.FillRectangle(Brushes.White, ClientRectangle);

g.FillRectangle(Brushes.Red, new Rectangle(10, 10, 50, 50));

Brush linearGradientBrush = new LinearGradientBrush(

new Rectangle(10, 60, 50, 50), Color.Blue, Color.White, 45); g.FillRectangle(linearGradientBrush, new Rectangle(10, 60, 50, 50));

// Викликаємо метод Dispose() уручну linearGradientBrush.Dispose();

g.FillEllipse(Brushes.Aquamarine, new Rectangle(60, 20, 50, 30)); g.FillPie(Brushes.Chartreuse, new Rectangle(60, 60, 50, 50), 90, 210); g.FillPolygon(Brushes.BlueViolet, new Point[]{

new Point(110, 10) new Point(150, 10) new Point(160, 40) new Point(120, 20) new Point(120, 60) ));

}

Тепер натисніть клавішу F5 і запустіть програму.

111

Вправа 3. Малювання квадратів по натисненню лівої кнопки миші

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

Мал. 13. Застосування, що малює квадрати

Запустіть Visual Studio 2005 і створіть нове C# Windows Application, назвавши його DrawSquare. Виділіть форму і змініть її властивість Text на “DrawSquare”.

Помістіть на форму елемент управління StatusStrip, який забезпечуватиме функціональність рядка стану. (У старих версіях Visual Studio для цих цілей використовувався компонент StatusBar.) Клацніть на стрілці в лівій частині компоненту StatusStrip і виберіть із списку Status Label. У вашому проекті з'явиться об'єкт toolStripStatusLabel1, у властивості якого Text можна виводити повідомлення в рядок стану.

Виділіть форму. У вікні Properties перейдіть на закладку Events і створіть обробник події MouseDown. Перед цим обробником вставте рядок з визначенням об'єкту типу ArrayList для зберігання квадратів, які створюватимуться по клацанню лівої кнопки миші.

// Store the squares that are painted on the form. ArrayList squares = new ArrayList();

До групи команд, що починаються з using, додайте рядок:

using System.Collections;

Напишіть обробник події MouseDown в наступному вигляді:

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

// Add а square and update the screen.

Rectangle square = new Rectangle(e.X, e.Y, 20, 20); squares.Add(square);

this.Invalidate(square);

}

else if (e.Button == MouseButtons.Right)

{

// Search for the clicked square. int squareNumber = 0;

foreach (Rectangle square in squares)

112

{

squareNumber++;

if (square.Contains(e.X, e.Y))

{

MessageBox.Show("Point inside square #" + squareNumber.ToString());

}

}

}

}

Перед обробником події MouseDown вставте наступний метод:

private void DrawRectangle(Rectangle rect, Graphics g)

{

Pen drawingPen = new Pen(Color.Black, 2); g.DrawRectangle(drawingPen, rect);

}

Створіть обробник події Paint.

private void Form1_Paint(object sender, PaintEventArgs e)

{

Pen drawingPen = new Pen(Color.Black, 2); foreach (Rectangle square in squares)

{

e.Graphics.DrawRectangle(drawingPen, square);

}

toolStripStatusLabel1.Text = " " + squares.Count.ToString() + " squares";

}

Запустіть і протестуйте застосування.

Методичні вказівки і теоретичні відомості.

GDI розшифровується як Graphic Device Interface (інтерфейс графічних пристроїв). GDI+ - це бібліотека, покликана замінити існуючий інтерфейс GDI, що є графічним ядром попередніх версій Windows. Вона поєднує в собі всі достоїнства свого попередника і надає безліч нових могутніх можливостей. Саме ця бібліотека, вірніше, заснований на ній новий графічний інтерфейс, є "обличчям" нових операційних систем – Windows XP і Windows 2003 Server.

У .NET передбачено ряд просторів імен, призначених для підтримки GDI+. Крім очікуваних стандартних типів (наприклад, для роботи з кольором, з шрифтами, з пером і кистю, із зображеннями) в цих просторах імен передбачені типи для виконання досить витончених операцій, таких як геометричні перетворення, згладжування нерівностей, підготовка палітри, підтримка виведення на принтер і багато інших. Перелік найбільш важливих просторів імен для роботи з графічними зображеннями представленв таблиці 10.

Таблиця 10. Найбільш важливі простори імен GDI+.

Простір імен

Спеціалізація

 

 

 

 

 

 

 

System.Drawing

Це

– найважливіший

простір

імен

GDI+, який містить

 

основні

типи

для

виведення

графіки

(для

роботи з

 

шрифтами,

перами,

кистю

і

т.п.),

а

також

виключно

 

важливий тип Graphics.

 

 

 

 

 

System.Drawing.Drawing2D

У цьому просторі імен передбачені типи для виконання

 

складніших операцій з двовимірною графікою (градієнтна

 

заливка, геометричні перетворення і т.п.)

 

 

System.Drawing.Imaging

Тут

визначені

типи,

які

дозволяють

безпосередньо

 

працювати з графічними зображеннями (міняти палітру,

 

витягувати метадані зображень, виконувати операції з

 

метафайлами і т.п.)

 

 

 

 

 

 

 

 

 

 

113

 

 

 

 

 

 

System.Drawing.Printing

Цей

простір

імен визначає типи

для виведення

графіки на

 

принтер і взаємодії

з принтером

в цілому.

 

 

System.Drawing.Text

Цей

простір

імен

дозволяє

працювати

з

системними

 

шрифтами.

 

 

 

 

 

Нові технології і можливості GDI+:

Градієнтне зафарбовування: дозволяє заливати складні фігури відтінками з різними законами розподілу кольору, малювати векторні примітиви (наприклад, лінії) з градієнтним забарвленням.

Підтримка прозорості: можна створювати кисті і растри з прозорими і напівпрозорими областями, заливати області напівпрозорим кольором, призначати Color Key для растрового зображення і працювати з його каналом альфа, а також малювати напівпрозорі векторні примітиви і текст.

Режими поліпшення зображення: дозволяють значно поліпшити призначене для користувача сприйняття за рахунок згладжування контурних нерівностей (antialiasing) і префильтрации растрових зображень.

Сплайни: окрім тих, що вже існують в GDI кривих Безье, підтримується новий вигляд кривих - сплайни, які імітують поведінку натягнутої і зігнутої сталевої смуги. Сплайни є гладкими кривими.

Шляхи: як вже говорилося, шляхи тепер існують незалежно від контексту малювання і є могутнім засобом створення складних векторних об'єктів. Крім того, з'явилася можливість вирівнювати (flatten) шляхи, тобто перетворювати їх до набору відрізків прямих.

Координатні перетворення: об'єкт Matrix дозволяє здійснювати операції повороту, перенесення, масштабування і віддзеркалення об'єктів GDI+.

Регіони: на відміну від GDI, регіони тепер не прив'язані до координат пристрою і підкоряються координатним перетворенням.

Робота з растрами: тепер можна практично все! Підтримується відрисовка растрів з накладенням зовнішнього каналу альфа, масштабуванням, розтягуванням і поворотом растрів. При цьому можна встановити режими відображення окремих пікселів - від простого перенесення до префільтрации (якнайкраща якість зображення). Стало можливим малювати векторні примітиви, залиті текстурами.

Підтримка популярних форматів графічних файлів: незвичайно приємне нововведення для всіх програмістів, що мають справу з різними графічними форматами. Підтримуються формати BMP, GIF, TIFF, JPEG, Exif (розширення TIFF і JPEG для цифрових фотокамер), PNG, ICON, WMF і EMF. Декодери різних форматів виконані з урахуванням їх специфіки, так що Ви зможете, наприклад, відобразити анімаційний GIF або додати коментар до TIFFфайлу. Завантажений, створений або модифікований файл може бути збережений на диск в одному з відповідних форматів. Існує можливість написання власних декодерів.

Формат EMF+: зрозуміло, вся ця пишність не могла уміщатися в тісні рамки старого Enhanced Metafile. Для опису нових можливостей був створений новий формат метафайлу EMF+, який дозволяє зберегти на диск і потім програти послідовність графічних команд. Існує можливість записати "дуальний" метафайл, зрозумілий старим GDI-програмам. Нові програми читатимуть з нього GDI+ - інформацію.

114

Огляд простору імен System.Drawing

Більшість типів, які ви використовуватимете при створенні застосувань GDI+, знаходяться в просторі імен System.Drawing. У таблиці 11 показані основні типи цього простору імен.

Таблиця 11. Основні типи простору імен System.Drawing

Тип

Призначення

Bitmap

Інкапсулює файл зображень (*.bmp та інші)

Brush

Об'єкти Brush (кисть)використовуються для заповнення

Brushes

простору усередині геометричних фігур, таких як

SolidBrush

прямокутники, еліпси і полігони.

SystemBrushes

 

TextureBrush

 

BufferedGraphics

Цей новий .NET 2.0 тип забезпечує подвійну буферизацію, яка

 

використовується для зменшення мерехтіння при

 

перемальовуванні.

Color

Структура Color визначає набір статичних полів, які можуть

SystemColors

бути використані для настройки кольору пер та кистей.

Font

Тип Font інкапсулює характеристики шрифту.

 

FontFamily

 

Graphics

Цей найважливіший клас представляє поверхню малювання і

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

 

 

геометричних фігур.

Icon

Ці класи призначені для роботи з призначеними для

користувача і системними піктограмами.

SystemIcons

 

Image

Image – це абстрактний базовий клас, який забезпечує

можливості типів Bitmap, Icon і Cursor.

ImageAnimator

 

Pen

Pen (перо) використовується для малювання прямих і кривих

Pens

ліній.

SystemPens

 

Point

PointF

Rectangle

RectangleF

Size

SizeF

StringFormat

Region

Ці структури представляють (x,y) координати точок у вигляді цілих або дійсних чисел.

Ці структури призначені для роботи з прямокутними областями (int/float).

Ці структури забезпечують роботу з розмірами (висотою і шириною).

Цей тип використовується для форматування тексту.

Визначає область, зайняту геометричною фігурою.

Можливості класу Graphics

Клас System.Drawing.Graphics – це ворота у функціональні можливості малювання GDI+. Цей клас не тільки представляє поверхню, на якій ви хочете малювати (це може бути поверхня форми, поверхні елементів управління або регіони пам'яті), але також визначає набір методів, які дозволяють виводити текст, зображення і геометричні фігури. Найбільш часто використовувані методи цього класу представлені в таблиці 12.

115

Таблиця 12. Деякі методи класу Graphics.

Метод

Призначення

FromHdc()

Ці статичні методи забезпечують можливість отримання

FromHwnd()

об'єкту Graphics з елементу управління або зображення.

FromImage()

 

Clear()

Заповнює об'єкт Graphics вибраним користувачем кольором,

 

видаляючи його попередній вміст.

DrawArc()

Ці методи використовуються для виведення зображень і

DrawBezier()

геометричних фігур. Як ви побачите, методи DrawXXX()

DrawBeziers()

використовують об'єкт GDI+ Pen.

DrawCurve()

 

DrawEllipse()

 

DrawIcon()

 

DrawLine()

 

DrawLines()

 

DrawPie()

 

DrawPath()

 

DrawRectangle()

 

DrawRectangles()

 

DrawString()

 

FillEllipse()

Ці методи використовуються для заповнення внутрішніх

FillPath()

областей графічних об'єктів

FillPie()

 

FillPolygon()

 

FillRectangle()

 

Об'єкт Graphics для деякого вікна можна одержати двома шляхами. Перший полягає в перевизначенні події OnPaint() – віртуального методу, який клас Forms успадковує від класу Control. В цьому випадку об'єкт Graphics ми одержуємо з PaintEventArgs, який передається разом з подією:

protected override void OnPaint(PaintEventArgs e)

{

Graphics g = e.Graphics; // Малюємо тут

}

У деяких ситуаціях може потрібно виконувати малювання у вікні безпосередньо, не чекаючи настання події OnPaint(). Це може виявитися актуальним в тому випадку, якщо ми створюємо код, призначений для вибору у вікні яких-небудь графічних об'єктів, або переносимо якийсь об'єкт за допомогою миші. В цьому випадку доступ до об'єкту Graphics можна одержати, звертаючись до методу CreateGraphics() даної форми, який є ще одним методом, успадкованим класом Forms від класу Control.

protected void Form1_Click(object sender, System.EventArgs e)

{

Graphics g = this.CreateGraphics();

// Малюємо тут

g.Dispose();

}

116

Лабораторна робота №10. Доступ до даних за допомогою ADO.NET.

Мета роботи: засвоїти основний механізм доступу до даних за допомогою ADO.NET, набути практичних навичок розробки застосувань, що відображають інформацію з базы даних.

Завдання.

Для бази даних Northwind Traders, що входить в поставку Visual Studio 2005, виконати наступне:

1.Створити з'єднання з базою даних з використанням Data Source Configuration Wizard.

2.Витягнути дані з бази даних і відобразити їх графічно в Microsoft Visual Studio 2005.

3.Провести вибірку з бази даних SQL Server, використовуючи ADO.NET.

Хід роботи.

1.Створення бази даних. Перш, ніж просуватися далі, треба створити базу даних Northwind Traders. Запустіть Far і перейдіть в каталог . . . \Program Files\Visual Studio 8\SDK\v2.0\Samples\Setup\

2.У командному рядку наберіть наступну команду:

sqlcmd –S YourServer\SQLExpress –E –iinstnwnd.sql

Замініть YourServer на ім'я свого комп'ютера. (Ви можете визначити ім'я комп'ютера, набравши в командному рядку команду hostname). Ця команда використовує утиліту sqlcmd для з'єднання з локальною версією SQL Server 2005 Express і запуску скрипта instnwnd.sql. Цей скрипт містить команди SQL, які створюють базу даних Northwind Traders і таблиці бази даних, і заповнюють таблиці деякою тестовою інформацією.

3.Створення джерела даних (data source). Використовуючи Visual Studio 2005, створіть новий проект на базі шаблону Windows Application. Назвіть проект DisplayProducts і збережіть його в своєму робочому каталозі.

4.У меню Data виберіть Add New Data Source. Запуститься майстер Data Source Configuration Wizard. Ви використовуєте цей майстер для створення з'єднання з джерелом даних. Джерелом даних може бути база даних (Database), об'єкт (Object), або web-сервіс (Web Service).

5.Виберіть Database і клацніть Next. Наступна сторінка майстра запрошуємо вас надати інформацію про з'єднання, яке ви хочете використовувати. Ви ще не створювали жодного з'єднання, тому клацніть кнопку New Connection.

З'явиться діалог Choose Data Source, що дозволяє вам вибрати Data source і Data provider. Data source уточнює тип бази даних, а Data provider уточнює спосіб з'єднання з базою даних.

6.Для даного застосування виберіть Microsoft SQL Server як Data source і .NET Framework Data Provider for SQL Server як Data provider. Клацніть Continue для переходу до наступного кроку.

З'явиться діалог Add Connection. У цьому діалозі ви уточните, з яким SQL Server ви хочете з'єднатися, механізм аутентифікації і вкажіть базу даних, яку ви хочете використовувати.

7.Наберіть YourServer\SQLExpress у полі Server name, де YourServer – це ім'я вашого комп'ютера. Виберіть опцію Use Windows Authentication в групі радіокнопок Log on to the server. Виберіть в комбінованому списку базу даних Northwind і потім клацніть OK.

117

Ви повернетеся в майстер Data Source Configuration Wizard. Нове з'єднання одержить ім'я YourServer\SQLExpress.Northwind.dbo.

8.Клацніть знак + зліва від напису Connection String. Ви побачите рядок, який містить деталі з'єднання. Ця інформація представляється у форматі, який може використовувати SQL Server provider для з'єднання до сервера.

9.Клацніть Next.

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

10.Клацніть Next.

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

11.Розверніть директорію Tables і виберіть таблиці Products (Продукти) і Suppliers (Постачальники).

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

12.Клацніть Finish, щоб закінчити роботу з майстром.

13.Проглядання інформації про продукти і постачальників. У меню Data клацніть Preview Data.

З'явиться діалог Preview Data, що дає вам можливість проглянути дані, що повертаються створеним вами джерелом даних (Якщо у вас немає пункту меню Preview Data, виконайте подвійне клацання на Form1.cs у Solution Explorer, щоб відобразити Form1 у вікні Design View).

14.Клацніть на випадному списку Select an object to preview.

Ви побачите представлений у вигляді дерева вміст NorthwindDataSet.. Об'єкт DataSet містить два об'єкти DataTable з іменами Products і Suppliers. Нижче за кожне DataTable ви побачите вузол з ім'ям Fill, GetData(). Ці вузли відповідають об'єктам типу TableAdapter.

15.Клацніть вузол Fill, GetData() під пунктом Products і потім клацніть кнопку Preview.

Увікні з'являться рядки з таблиці Products бази даних.

16.У випадному списку Select an object to preview клацніть вузол Fill, GetData() під Suppliers. Клацніть Preview.

Цього разу відобразяться дані з таблиці Suppliers.

17.Клацніть Close, щоб закрити діалог Preview Data.

18.Відображення даних в застосуванні. Після того, як ви побачили, які визначені об'єкти DataSets, розглянемо, як ви можете їх використовувати в застосуванні.

УSolution Explorer клацніть праву кнопку миші на Form1.cs і перейменуйте форму в DataForm.cs. Діалогове вікно, що з'явилося, запитає, чи хочете ви модифікувати всі посилання з урахуванням нового імені. Клацніть Yes.

19.Виділіть DataForm у вікні Designer View. Використовуючи вікно Properties, властивості Text привласніть значення Suppliers and Products і змініть властивість Size на 800, 410.

118

20.У меню Data виберіть Show Data Sources. З'явиться вікно Data Sources, що відображає NorthwindDataSet з таблицями Products і Suppliers. Розверніть ці таблиці.

З'являться стовпці кожної таблиці разом з піктограмами, що показують, як кожен стовпець відображатимемося на формі. Більшість стовпців треба відображати в елементі textbox, за винятком стовпця Discontinued в таблиці Products, для якого потрібен checkbox. Це через те, що цей стовпець представляє бітове поле, що приймає логічне значення True/False. Також відзначте для себе, що Products з'являється двічі: як об'єкт DataTable і як стовпець в таблиці Suppliers. Так виявляється зв'язок між цими таблицями.

21.Клацніть таблицю Suppliers. З'явиться випадне меню, виберіть в ньому Details.

Ця дія встановить представлення таблиці постачальників у вигляді множини полів замість уявлення в елементі DataGrid. Представлення Details треба використовувати для даних на стороні “one” відносно багато-до-одного (many-to-one), а представлення Grid view зручно для сторони “many”.

22.Клацніть SupplierID в таблиці Suppliers. З'явиться інше випадне меню. Клацніть його. Ви побачите різні способи для представлення даних в цьому стовпці. Стовпець SupplierID є первинний ключ для таблиці Suppliers, тому його не можна змінювати. З цієї причини виберіть для нього представлення Label.

23.Клацніть таблицю Suppliers і перетягніть її в лівий верхній кут форми Suppliers and Products.

Відмітьте, що під формою з'явиться ряд компонентів.

Компонент

Опис

northwindDataSet

Це джерело даних, використовуване формою.

 

Компонент має в своєму розпорядженні методи

 

оновлення даних в базі даних.

suppliersBindingSource

Цей компонент діє як посередник між елементами

 

управління на формі і джерелом даних. Він має в

 

своєму розпорядженні методи навігації по

 

DataSet, додаваннях, видаленнях і редагуваннях

 

рядків.

suppliersTableAdapter

Це об'єкт TableAdapter для таблиці Suppliers,

 

що має в своєму розпорядженні методи пошуку

 

рядків в таблиці і поповнення таблиці.

suppliersBindingNavigator

Це елемент BindingNavigator, що надає

 

стандартний механізм для навігації по рядках

 

таблиці

24.Клацніть на таблиці Products, яка розташовується усередині таблиці Suppliers, і перетягніть її на форму праворуч від полів таблиці Suppliers.

На формі з'явиться компонент DataGridView. Відмітьте, що під формою з'являться ще два компоненти: productsBindingSource і компонент TableAdapter для таблиці продуктів.

25.Виділіть компонент DataGridView на формі і розтягніть його направо до правої межі форми.

26.Припускаючи, що компонент DataGridView як і раніше виділений, клацніть Smart Tag handle, розташований на вершині правого верхнього кута компоненту.

З'явиться діалог DataGridView Tasks. Ви можете використовувати цей діалог для швидкої зміни деяких властивостей компоненту DataGridView і виконувати деякі інші завдання.

119

Очистіть чекбоксы Enable Adding, Enable Editing, Enable Deleting, і Enable Column Reordering.

27.Запустіть застосування без відладки, вибравши в меню Debug пункт Start Without Debugging. Коли з'явиться форма, перший постачальник (Exotic Liquids) відобразиться разом з трьома продуктами, які він поставляє. Клацніть на кнопці Move next на панелі навігації. З'явиться інформація про наступного постачальника.

28.Закрийте форму і поверніться в Visual Studio 2005.

Короткі теоретичні відомості.

Коротка історія забезпечення доступу до даних

Коли були створені найперші бази даних, такі як Oracle і DB2 компанії IBM, кожному розробнику, якому був потрібен доступ до даних, що зберігаються в них, доводилося використовувати функції, специфічні для конкретної бази даних. Кожна система володіла власною бібліотекою функцій, наприклад, для Oracle використовувався Oracle Call Interface, а для SQL Server компанії SyBase (пізніше купленої компанією Microsoft) – бібліотека DBLib. Це забезпечувало швидкий доступ до даних, оскільки програми з цих бібліотек працювали з БД безпосередньо. З іншого боку, це означало, що програмісти повинні бути знайомі з бібліотеками для кожної БД, з якими їм доводилося працювати, тому завдання написання застосувань для роботи з даними було вельми складне. Це також означало, що якщо компанія переходила на використання іншої БД, застосування доводилося переписувати наново.

Ця проблема була вирішена за допомогою Open Database Connectivity (ODBC – відкрита система зв'язку з базами даних). Система ODBC була створена на початку 90-х рр. компанією Microsoft спільно з поряд інших компаній і була стандартним набором функцій, які розробники могли застосовувати при роботі з будь-якими базами даних. Ці функції транслювалися у виклики функцій, властивих конкретній базі даних, за допомогою драйверів, специфічних для цієї бази даних.

Це дозволило вирішити основні проблеми, викликані існуванням різних бібліотек баз даннях, – розробникам тепер потрібно було уміти користуватися тільки одним набором функцій (функціями ODBC), і якщо компанія переходила від однієї БД до іншої, то все, що їм доводилося змінювати, – це код, що відповідає за встановлення з'єднання з базою даних. При цьому одна проблема все одно залишалася невирішеною. У компаній скопилася величезна кількість представлених в електронному вигляді даних, що зберігаються в найрізноманітніших формах, – у вигляді електронних листів, web-сторінок і т.п. ODBC чудово працювала з даними в традиційних базах даних, але не справлялася з іншими типами даних, які не зберігалися у вигляді акуратних стовпців і рядків і у яких могла бути відсутньою яка-небудь зв'язна структура.

Рішення цієї проблеми привело до появи OLE DB. OLE DB працює аналогічно ODBC, представляючи рівень абстракції між БД і застосуваннями, яким потрібен доступ до даних. Клієнтські застосування взаємодіють з джерелом даних, яке може бути традиційною базою даних або будь-яким іншим сховищем інформації, за допомогою провайдера OLE DB для цього джерела. Дані, витягувані з джерела, представляються в застосуванні в табличному форматі – тобто так, як ніби вони були витягнуті з бази даних.

Остання технологія доступу до даних, про яку необхідно згадати, – це ActiveX Data Objects (ADO). ADO – це просто тонкий шар, який знаходиться над OLE DB і дозволяє програмам, написаним на мовах високого рівня на зразок Visual Basic, діставати доступ до даних OLE DB.

120