Пожалуй ни один серьезный сайт не может обойтись без баз данных. Будь то форум, гостевая книга или даже чат, базы данных везде, они удобны и практичны, хотя конечно, как и все в нашем мире, имеют свои недостатки, но речь сейчас не об этом.
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
:
Dim dbpath
dbpath = Server.MapPath("my.mdb")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath
В первой строке объявляется переменная dbpath
. Во второй строке, ей присваивается путь фактического размещения ASP-страницы на сервере и имя файла базы данных – my.mdb
.
В третьей строке, методом Open
, открывается соединение с базой данных типа Microsoft.Jet.OLEDB.4.0
, находящейся (Data Source
) по указанному в переменной dbpath
адресу.
Итак, теперь база данных у нас присоединена, открыта и готова, так сказать, к бою.
Для работы с данными используется объект Recordset
. Создается Recordset
также как и Connection
:
Dim RS 'объявляем переменную для Recordset
'создаем объект Recordset
Set RS = Server.CreateObject("ADODB.Recordset")
В выше указанном коде, переменной RS
передаются свойства объекта Recordset
.
Все операции с базой данных производятся SQL-запросами.
SQL (Structured Query Language) – это универсальный язык структурированных запросов для работы с базами данных, о котором уже написано не мало статей и даже книг. В этой статье SQL будет рассмотрен только в рамках тематики статьи.
Также как и Connection
, Recordset
нужно открыть, для этого также используется метод Open
:
Dim strSQL 'объявляем переменную для SQL-запроса
strSQL = "SELECT * FROM tblMain" 'формируем SQL-запрос
RS.Open strSQL, Conn 'открываем Recordset
В первой строке объявляется переменная strSQL
, она нам нужна для создания SQL-запроса, хотя можно обойтись и без нее, но согласитесь, так гораздо удобней, чем вставлять SQL-запрос непосредственно в метод Open
.
Во второй строке определен сам запрос. Команда SELECT
– наиболее часто используемая инструкция, позволяет получить данные из таблицы. В нашем случае, все данные из таблицы tblMain
.
При работе с Recordset
, другие SQL-команды обычно не используются.
В третьей строке, методом Open
, открывается Recordset
с, ранее определенным, SQL-запросом, в уже открытой, базе данных Conn
.
Для проверки наличия данных в базе данных, можно использовать метод BOF
и EOF
объекта Recordset
:
If RS.BOF = True Or RS.EOF = True Then 'данных нет
Response.Write("<br>данные отсутствуют<br>")
Else 'данные есть
RS.MoveLast 'переходим к последней записи
RS.MoveFirst 'переходим к первой записи
Response.Write("всего записей в базе данных: " & _
RS.RecordCount & "<br>")
Do While Not RS.EOF 'перебираем все записи
'проверяем, достигнут ли конец базы данных
'если да, то выходим из цикла
If RS.BOF = True Or RS.EOF = True Then Exit Do
'выводим данные из поля id и name
Response.Write(RS.Fileds("id") & "<br>")
Response.Write(RS.Fields("name") & "<br>")
'не забываем «перелистывать» данные
RS.MoveNext
Loop
End If
В первой строке проверятся наличие данных в таблице базы данных.
В случае, если будет возвращено значение True
, то в следующей строке выводится надпись: данные отсутствуют
.
Писать True
, в принципе, не обязательно, достаточно просто написать: If RS.BOF Or RS.EOF Then
- результат будет тот же.
Если данные в таблице есть, то в 4-5 строках методом MoveLast
и MoveFirst
экземпляр Recordset
переходит на последнюю и первую запись. Это необходимо для точного определения количества записей в базе данных.
Количество записей возвращается методом RecordCount
.
В цикле Do Loop
происходит поочередный вывод данных из полей id
и name
.
Обратите особое внимание на 16-ю строку. При отсутствии метода MoveNext
, получится бесконечный цикл, а это, как вы сами понимаете, приведет к зависанию ASP-программы.
По завершению работы с таблицей данных, Recordset
, если он больше не нужен, желательно закрыть. Закрывается Recordset
методом Close
:
RS.Close 'закрываем Recordset
Добавить данные в таблицу базы данных можно методом AddNew объекта Recordset:
'формируем SQL-запрос
strSQL = "SELECT * FROM tblMain"
RS.Open strSQL, Conn 'открываем Recordset
RS.AddNew
'устанавливаем значения полей
RS("name") = "Aleksey Nemiro"
RS("age") = "22"
RS.Update 'обновляем Recordset – применяем изменения
RS.Close 'закрываем Recordset
В указанном выше коде формируется SQL-запрос, главным образом указывающий на таблицу, в которую будут добавляться данные. В наше случае – это таблица tblMain
.
В четвертой строке Recordset
переводится в режим добавления данных.
Далее определяются значения полей name
и age
. Обратите внимание, слово Fields
опущено, поскольку метод Fields
у Recordset
используется по умолчанию.
Затем происходит обновление Recordset
, т.е. добавленные данные окончательно заносятся в базу данных. Если команду Update
не выполнить, то данные не добавятся.
В конце, методом Close
, экземпляр Recordset
закрывается.
Для редактирования уже имеющихся данных, в Recordset
используется метод Edit
:
'формируем SQL-запрос
strSQL = "SELECT * FROM tblMain WHERE id = 1"
RS.Open strSQL, Conn 'открываем Recordset
RS.Edit
RS("name") = "Aleksey" 'заменяем значение поля name на Aleksey
RS("age") = "23" 'заменяем значение поля age на 23
RS.Update 'обновляем Recordset – применяем изменения
RS.Close 'закрываем Recordset
В выше представленном коде формируется SQL-запрос. Оператор WHERE
указывает на то, что нужно «выдернуть» только запись, которая имеете значение поля id = 1
.
Далее открывается Recordset
, и затем, Recordset
методом Edit
переходит в режим редактирования.
Далее изменяются данные в полях name
и age
.
В конце Recordset
обновляется и далее, закрывается.
Удаление данных, как вы уже наверное догадались, производится методом Delete
:
'формируем SQL-запрос
strSQL = "SELECT * FROM tblMain WHERE id = 1"
RS.Open strSQL, Conn 'открываем Recordset
RS.Delete 'удаляем запись
RS.Close 'закрываем Recordset
Оператор WHERE
команды SELECT
указывает на то, что нужно выбрать запись, которая имеет значение поле id=1
.
Если оператор WHERE
опустить, то будет выбрана первая запись.
А что делать, если нужно удалить несколько записей? Конечно можно перебирать все записи Recordest
и удалять их, но согласитесь, это лишняя трата времени и ресурсов компьютера.
В данном случае можно обойтись вообще без Recordset
, но придется расширить свои знания компьютерной лингвистики SQL-командами и объектом Connection
.
Для удаления данных из таблицы в SQL используется команда DELETE
:
DELETE FROM имя_таблицы WHERE условные_значения
Изменить данные можно командой UPDATE
:
UPDATE имя_таблицы SET значения_полей WHERE условные_значения
Для добавления данных существует команда INSERT
:
INSERT INTO имя_таблицы (поля) VALUES (значения_полей)
Выполнение SQL-запроса производится методом Execute
объекта Connection
:
Conn.Execute strSQL
В завершение, все открытые объекты необходимо закрыть методом Close
и самое главное не забыть выгрузить их из памяти компьютера:
Conn.Close
RS.Close
Set RS = Nothing
Set Conn = Nothing
Как видите, объект Recordset
позволяет производить различные операции с данными, он более прост в использовании и не требует наличия знаний языка SQL, в то время как использование метода Execute
объекта Connection
, напротив, требует как минимум знания основных команд SQL.
Однако Recordset
работает гораздо медленней. Recordset
следует использовать для получения данных, для добавления и редактирования данных содержащих «большой» текст c наличием зарезервированных SQL символами.
Метод Execute
вполне подойдет для добавления или изменения «меленьких» данных, а также их удаления. Например, если надо добавить текст статьи в базу данных, то лучше использовать Recordset
, а если нужно изменить значение счетчика, то – Execute
.
Recordset
имеет еще много различных методов, здесь были рассмотрены только основные и наиболее часто используемые методы.
Если у вас возникнут какие-либо вопросы по работе с базами данных, пишите мне, я постараюсь на них ответить.
Алексей Немиро
2005-07-08