Skip to content

Latest commit

 

History

History
220 lines (149 loc) · 14.2 KB

ASP_Databases.md

File metadata and controls

220 lines (149 loc) · 14.2 KB

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:

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