Рейтинг блогов

ASP – Работа с базами данных

дата добавления: 08 июля 2005 / 16:32, просмотров: 11012, комментариев: 5

Пожалуй ни один серьезный сайт не может обойтись без баз данных. Будь то форум, гостевая книга или даже чат, базы данных везде, они удобны и практичны, хотя конечно, как и все в нашем мире, имеют свои недостатки, но речь сейчас не об этом. ASP (Active Server Page) для работы с базами данных использует библиотеку ADO (ActiveX Data Objects), которая входит в состав набора компонентов MDAC (Microsoft Data Access Components – найти можно на сайте компании Microsoft). В этой статье я расскажу о использовании ADO при разработке ASP-приложений.

 

Прежде чем начать работу непосредственно с данными, сначала необходимо «подключить» базу данных. Подключение базы данных осуществляется объектом Connection библиотеки ADO.
Объект Connection можно создать методом CreateObject объекта Server:

 

01:

02:

03:

...

Dim Conn 'объявляем переменную для Connection

'создаем объект Connection

Set Conn = Server.CreateObject("ADODB.Connection")

 

 

В 3-й строке в переменной Conn передаются свойства объекта Connection.

 

После создания объекта Connection, необходимо, собственно, открыть саму базу данных, делается это методом Open:

 

...

04:

05:

06:

...

 

Dim dbpath

dbpath = Server.MapPath("my.mdb")

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath

 

 

В 4-ой строке объявляется переменная dbpath, далее, в 5-ой строке, ей присваивается путь фактического размещения ASP-страницы на сервере и имя файла базы данных – my.mdb.

В 6-ой строке, методом Open, открывается соединение с базой данных типа Microsoft.Jet.OLEDB.4.0, находящейся (Data Source) по указанному в переменной dbpath адресу.

 

И так, теперь база данных у нас присоединена, открыта и готова, так сказать, к бою. Для работы с данными используется объект Recordset. Создается Recordset также как и Connection:

 

...

07:

08:

09:

...

 

Dim RS 'объявляем переменную для Recordset

'создаем объект Recordset

Set RS = Server.CreateObject("ADODB.Recordset")

 

 

В 9-ой строке переменной RS передаются свойства объекта Recordset.

 

Все операции с базой данных производятся SQL-запросами. SQL (Structured Query Language) – это универсальный язык структурированных запросов для работы с базами данных, о котором уже написано не мало статей и даже книг. В этой статье SQL будет рассмотрен только в рамках тематики статьи.

Также как и Connection, Recordset нужно открыть, для этого также используется метод Open:

 

...

10:

11:

12:

...

 

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:

 

...

13:

14:

15:

16:

17:

18:

19:

20:

21:

22:

23:

24:

25:

26:

27:

28:

29:

30:

...

 

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

 

В 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:

 

...

27:

...

 

RS.Close 'закрываем Recordset

 

 

Добавить данные в таблицу базы данных можно методом AddNew объекта Recordset:

 

...

28:

29:

30:

31:

32:

33:

34:

35:

36:

...

 

'формируем 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

 

В 29-ой строке формируется SQL-запрос, главным образом указывающий на таблицу, в которую будут добавляться данные, в наше случае – это таблица tblMain.

В 31-ой строке Recordset переводится в режим добавления данных.

В строках 33-34 определяются значения полей name и age. Обратите внимание, слово Fields опущено, поскольку метод Fields у Recordset используется по умолчанию.

В 35-ой строке происходит обновление Recordset, т.е. добавленные данные окончательно заносятся в базу данных. Если команду Update не выполнить, то данные не добавятся.

В 36-ой строке, методом Close, Recordset закрывается.

 

Для редактирования уже имеющихся данных, в Recordset используется метод Edit:

 

...

37:

38:

39:

40:

41:

42:

43:

44:

...

 

'формируем 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

 

В 38-ой строке формируется SQL-запрос. Оператор WHERE указывает на то, что нужно «выдернуть» только запись, которая имеете значение поля id = 1. В 39-ой строке открывается Recordset, далее, в 40-ой строке Recordset методом Edit переходит в режим редактирования. В строках 41 и 42 изменяются данные в полях name и age.

В 43-ой строке Recordset обновляется и далее, в 44-ой строке – закрывается.

 

Удаление данных, как вы уже наверное догадались, производится методом Delete:

 

...

45:

46:

47:

48:

49:

...

 

'формируем SQL-запрос

strSQL = "SELECT * FROM tblMain WHERE id = 1"

RS.Open strSQL, Conn 'открываем Recordset

RS.Delete 'удаляем запись

RS.Close 'закрываем Recordset

 

Оператор WHERE команды SELECT в 46-ой строке указывает на то, что нужно выбрать запись, которая имеет значение поле id=1. Если оператор WHERE опустить, то будет выбрана первая запись.

В 47-ой строке Recordset открывается, далее, в 48-ой строке запись удаляется и в 49-ой строке Recordset закрывается.

 

А что делать, если нужно удалить несколько записей? Конечно можно перебирать все записи Recordest и удалять их, но согласитесь, это лишняя трата времени и ресурсов компьютера. В данном случае можно обойтись вообще без Recordset, но придется расширить свои знания компьютерной лингвистики SQL-командами и объектом Connection.

 

Для удаления данных из таблицы в SQL используется команда DELETE:

DELETE FROM имя_таблицы WHERE условные_значения

 

Изменить данные можно командой UPDATE:

UPDATE имя_таблицы SET значения_полей WHERE условные_значения

 

Для добавления данных существует команда INSERT:

INSERT INTO имя_таблицы (поля) VALUES (значения_полей)

 

Выполнение SQL-запроса производится методом Execute объекта Connection:

 

...

00:

...

 

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, помимо упомянутых, имеет еще много различных методов, здесь были рассмотрены только основные и наиболее часто используемые методы.

 

Если у вас возникнут какие-либо вопросы по работе с базами данных, пишите мне, я постараюсь на них ответить <mailto:nemiro_as@vbnet.ru>.


Распространение данной статьи или ее части запрещено. Все права защищены!

Copyright © Nemiro AS, 08.07.2005

Комментарии (всего: 5)

Добавить комментарий rss
Автор: Сергей @ 02 февраля 2008, 16:30   ·   ссылка
Очн сильно помогли...
СПОСИБО!!!
Автор: Сергей @ 02 февраля 2008, 16:31   ·   ссылка
Ещё раз СПАСИБО!!!
Автор: Алексей Немиро @ 06 февраля 2008, 07:52   ·   ссылка
Всегда, пожалуйста :)

--
Пишу на будущее, как показала практика, у многих возникают проблемы с записью данных в БД. Проблема обычно кроется в правах доступа к файлу БД. Для ее решения необходимо установить права на запись на файл БД, либо на каталог в котором он находится, также можно посмотреть настройки безопасности в IIS.

Если у вас возникнут какие-либо вопросы, вы всегда можете их задать на форуме Kbyte.Ru : http://kbyte.ru/forum
Автор: Валерий @ 15 февраля 2008, 19:11   ·   ссылка
Букв мало - а доходчиво
изложенных знаний очень много!!!

Спасибо!!!


Автор: Maitre Desir @ 01 мая 2008, 12:43   ·   ссылка
Огромное спасибо! Особенно за то как правильно строить dbpath! И отд. спасибо за комент по поводу безопасности

Добавить комментарий

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учётная запись на этом сайте, пройдите процудуру авторизации.
В противном случае, зарегистрируйтесь на сайте.