DROP THE BASE! ADO И БАЗЫ БАННЫХ

Pony (pony@xakep.ru)

Спецвыпуск Xakep, номер #028, стр. 028-020-1

Сегодня мы с тобой продолжим грызть продвинутые сетевые технологии и разбираться, как все это пашет. С помощью скриптовых языков ты можешь интерактивно менять цвет своей странички и даже пункты меню, но генерить паги без баз данных, особенно, если инфы становится все больше и больше, - тухляк. Так что основная фича языков сценариев - это как раз работа с БД. И если оформление страничек ты можешь менять, не юзая скрипты (например, при помощи SSI инструкций), то выцепить инфу из базы данных без написания полноценных скриптов - анриал.

ПОЧЕМУ ASP?

ASP использует для доступа к данным объекты ADO (ActiveX Data Object). ADO можно юзать для доступа к таблицам Excel, базам данных Access или текстовым файлам. Вообще, любой источник данных, который имеет ODBC драйвер и может быть использован в качестве ODBC базы данных в винде, также можно юзать для доступа через ADO. Общая логика работы с ADO такова: устанавливаем соединение с источником данных, считываем данные, выводим их в html-файл, закрываем соединение. И на каждом шаге работаем с объектами: создаем, наполняем, уничтожаем. И самое главное, при изменении источников данных не надо полностью переписывать код, вполне достаточно изменить строку, где описывается соединение.

КОННЕКТИМСЯ

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

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

Создать Connection еще не значит открыть это самое соединение. Сперва нужно намутить описалово соединения, для чего юзают свойство ConnectionString. Тут сидит вся инфа о Connection. Например, строка:

connection.ConnectionString = "Provider=SQLOLEDB;Source=local;UID=sa;PWD=;Database=pubs"

описывает соединение с SQL сервантом. Вместо connection, естественно, надо писать имя экземпляра объекта, который был создан (soska - в примере выше).

Описав соединение, его можно открывать:

connection.Open.

В общем случае синтаксис имеет вид:

connection.Open ConnectionString, UserID, Password, OpenOptions.

Все параметры можно явно не указывать и положить на них с высокой горы (типа - идите вы все по дефолту!). Но в таком виде код будет компактнее: не надо отдельной строкой указывать строку соединения. OpenOptions задает, в каком режиме будет открыто соединение. Этот режим описывают константы ConnectModeEnum:

adModeUnknown - по умолчанию;

adModeRead - соединение только для чтения;

adModeWrite - соединение только для записи;

adModeReadWrite - соединение для записи и чтения;

adModeShareDenyRead - запрещает открытие соединений на чтение, пока текущее соединение открыто;

adModeShareDenyWrite - запрещает открытие соединений на запись, пока текущее соединение открыто;

adModeShareExclusive - запрещает открытие соединений, пока текущее соединение открыто;

adModeShareDenyNone - запрещает открытие любых соединений, пока текущее соединение открыто.

То же самое можно зафигачить через свойство Mode объекта Connection еще до открытия соединения:

connection.Mode = adModeShareExclusive

ЭКОНОМЬ СЕРВАКИ!

Знаешь, как контачат ADO и IIS с соединениями? ADO видит соединение с базой как набор свойств, собранных в строку соединения. IIS создает пул соединений, куда складирует разные connection'ы, каждый из которых можно заюзать сколько угодно раз. Когда приложение запрашивает соединение, IIS проверяет, а не тусует ли уже в пуле свободный connection с такой же строкой соединения. Если нужное соединение удается найти, оно используется, если нет - создается новое. Таким образом, если в пуле удается нарыть открытое соединение с нужными свойствами, хитрый IIS просто возвращает линку на него и ни хрена не открывает. Так что пул ускоряет процесс установки соединений, ведь обычно юзают один источник данных и 2-3 типа доступа с разными паролями. Именно из-за организации пула запись объекта Connection в переменную Session замедляет работу сервака. Поэтому никогда так не делай.

Содержание  Вперед на стр. 028-020-2
Выпуски журнала "СПЕЦ Xakep"
Cпец Хакер #01Cпец Хакер #02Cпец Хакер #03Cпец Хакер #04Cпец Хакер #05Cпец Хакер #06Cпец Хакер #07Cпец Хакер #08Cпец Хакер #09Cпец Хакер #10Cпец Хакер #11Cпец Хакер #12Cпец Хакер #13Cпец Хакер #14Cпец Хакер #15Cпец Хакер #16Cпец Хакер #17Cпец Хакер #18Cпец Хакер #19Cпец Хакер #20Cпец Хакер #21Cпец Хакер #22Cпец Хакер #23Cпец Хакер #24Cпец Хакер #25Cпец Хакер #26Cпец Хакер #27Cпец Хакер #28Cпец Хакер #29Cпец Хакер #30Cпец Хакер #31Cпец Хакер #32Cпец Хакер #33Cпец Хакер #34Cпец Хакер #35Cпец Хакер #36Cпец Хакер #37Cпец Хакер #38Cпец Хакер #39Cпец Хакер #40Cпец Хакер #41Cпец Хакер #42Cпец Хакер #43Cпец Хакер #44Cпец Хакер #45Cпец Хакер #46Cпец Хакер #47Cпец Хакер #48Cпец Хакер #49Cпец Хакер #50Cпец Хакер #51Cпец Хакер #52Cпец Хакер #53Cпец Хакер #54Cпец Хакер #55Cпец Хакер #56Cпец Хакер #57Cпец Хакер #58Cпец Хакер #59Cпец Хакер #60Cпец Хакер #61Cпец Хакер #62Cпец Хакер #63Cпец Хакер #64Cпец Хакер #65Cпец Хакер #66Cпец Хакер #67Cпец Хакер #68Cпец Хакер #69Cпец Хакер #70Cпец Хакер #71Cпец Хакер #72Cпец Хакер #73Cпец Хакер #74Cпец Хакер #75