Пожалуй ни один серьезный сайт не может обойтись без баз данных. Будь то форум, гостевая книга или даже чат, базы данных везде, они удобны и практичны, хотя конечно, как и все в нашем мире, имеют свои недостатки, но речь сейчас не об этом.
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