ASP - Робота з базами даних
Мабуть жоден серйозний сайт не може обійтися без баз даних. Будь то форум, гостьова книга або навіть чат, бази даних скрізь, вони зручні і практичні, хоча звичайно, як і всі в нашому світі, мають свої недоліки, але мова зараз не про це. ASP (Active Server Page) для роботи з базами даних використовує бібліотеку ADO (ActiveX Data Objects), яка входить до складу набору компонентів MDAC (Microsoft Data Access Components - знайти можна на сайті компанії Microsoft). У цій статті я розповім про використання ADO при розробці ASP-додатків.
Перш ніж почати роботу безпосередньо з даними, спочатку необхідно «підключити» базу даних. Підключення бази даних здійснюється об'єктом Connection бібліотеки ADO.
Об'єкт Connection можна створити методом CreateObject об'єкта Server:
Dim Conn 'оголошуємо змінну для Connection
'Створюємо об'єкт Connection
Set Conn = Server. CreateObject ( "ADODB.Connection")
У 3-му рядку в змінної Conn передаються властивості об'єкта Connection.
Після створення об'єкта Connection, необхідно, власне, відкрити саму базу даних, робиться це методом Open:
dbpath = Server. MapPath ( "my.mdb")
Conn. Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" dbpath
В 4-му рядку оголошується змінна dbpath, далі, в 5-му рядку, їй присвоюється шлях фактичного розміщення ASP-сторінки на сервері і ім'я файлу бази даних - my.mdb.
І так, тепер база даних у нас приєднана, відкрита і готова, так би мовити, до бою. Для роботи з даними використовується об'єкт Recordset. Створюється Recordset також як і Connection:
Dim RS 'оголошуємо змінну для Recordset
'Створюємо об'єкт Recordset
Set RS = Server. CreateObject ( "ADODB.Recordset")
У 9-му рядку змінної RS передаються властивості об'єкта Recordset.
Всі операції з базою даних виробляються SQL-запитами. SQL (Structured Query Language) - це універсальна мова структурованих запитів для роботи з базами даних, про який вже написано чимало статей і навіть книг. У цій статті SQL буде розглянуто тільки в рамках тематики статті.
Також як і Connection, Recordset потрібно відкрити, для цього також використовується метод Open:
Dim strSQL 'оголошуємо змінну для SQL-запиту
strSQL = "SELECT * FROM tblMain" 'формуємо SQL-запит
RS. Open strSQL, Conn 'відкриваємо Recordset
У 10-му рядку оголошується змінна strSQL, вона нам потрібна для створення SQL-запиту, хоча можна обійтися і без неї, але погодьтеся, так набагато зручніше, ніж вставляти SQL-запит безпосередньо в метод Open.
У 11-му рядку, власне, і є сам запит. Команда SELECT - найбільш часто використовувана інструкція, дозволяє отримати дані з таблиці, в нашому випадку, всі дані з таблиці - tblMain. При роботі з Recordset, інші SQL-команди зазвичай не використовуються.
У 12-му рядку, методом Open, відкривається Recordset с, раніше визначеним, SQL-запитом, в уже відкритої, базі даних Conn.
Для перевірки наявності даних в базі даних, можна використовувати метод BOF і EOF об'єкта Recordset:
If RS. BOF = True Or RS. EOF = True Then 'даних немає
Response. Write ( "
дані відсутні
")
Else 'дані є
RS. MoveLast 'переходимо до останнього запису
RS. MoveFirst 'переходимо до першого запису
Response. Write ( "всього записів в базі даних:" _
RS. RecordCount "
")
Do While Not RS. EOF 'перебираємо всі записи
'Перевіряємо, чи досягнуто кінець бази даних
'Якщо так, то виходимо з циклу
If RS. BOF = True Or RS. EOF = True Then Exit Do
'Виводимо дані з поля id і name
Response. Write (RS. Fileds ( "id") "
")
Response. Write (RS. Fields ( "name") "
")
'Не забуваємо «перегортати» дані
У 13-му рядку перевірятися наявність даних в таблиці бази даних. У разі, якщо буде повернуто значення True, то в 14-му рядку виводиться напис: «дані відсутні».
Писати True, в принципі, не обов'язково, досить просто написати: «If RS.BOF Or RS.EOF Then» - результат буде той же.
Якщо дані в таблиці є, то в 16-17 рядках методом MoveLast і MoveFirst Recordset переходить на останню і перший запис. Це необхідно для точного визначення кількості записів в базі даних. Кількість записів повертається методом RecordCount в 18-19 рядках.
З 20-ої по 29-й рядок відбувається послідовний висновок даних з полів «id» і «name».
Зверніть особливу увагу на 28-й рядок. При відсутності методу MoveNext, вийде нескінченний цикл, а це, як ви самі розумієте, призведе до зависання ASP-програми.
По завершенню роботи з таблицею даних, Recordset, якщо він більше не потрібен, бажано закрити. Закривається Recordset методом Close: