Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

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

Pony (pony@xakep.ru)

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


adCmdTable - указывает, что ADO должен сгенерить SQL запрос, который возвращает все строки из таблицы, обозначенной в CommandText;

adCmdTableDirect - указывает, что провайдер должен возвратить все строки из таблицы, обозначенной в CommandText;

adCmdStoredProc - указывает, что провайдер должен интерпретировать CommandText как хранимую процедуру;

AdCmdUnknown - указывает на то, что тип команды, описанной в строке CommandText, неизвестен.

ПОЛУЧАЕМ ДАННЫЕ

Немного выше мы зацепили еще один объект - Recordset. Юзать его легко, если знать, что он собой представляет. Recordset - это таблица значений, разделенных на строки и столбцы. Значения в этой таблице могут быть взяты из разных таблиц в базе данных. И даже быть результатом вычисления нескольких полей разных таблиц. Объект Recordset можно сортировать, просматривать в поисках нужных данных, преобразовывать в строки или массивы и даже записывать на диск и считывать как объекты. Как же с ним работать?

Сначала его нужно создать:

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

Вот, мы замутили объект Recordset с именем Pomoi. Как теперь его забить данными по самое не балуйся? Легко!

Pomoi.Open CommandText, Connection/ConnectionString, CursorType, LockType, Options

Можешь выкинуть все аргументы в помойку, но для увеличения скорости работы лучше потрудиться и заполнить все, что движется. Например, если не указана строка соединения, то сервак начинает обсасывать строку CommandText, чтобы выяснить, какое из открытых соединений можно заюзать для заполнения объекта Recordset. Если аргумент Options (которые принимает точно такие же значения, что и аргумент Options метода Connection.Execute) не указан, то сервант опять начинает тупить над строкой CommandText и пытается определить, какой тип команды она содержит. Итак, ты уже воткнул, что все аргументы нужно указать. ADO очень гибкая технология и может очень быстро работать, но дефолтные значения для необязательных аргументов - не всегда самое шустрое решение.

ДЛИННЫЙ КОД - ЛУЧШЕ!

Итак, аргумент CommandText может содержать динамический SQL оператор, имя таблицы или представления или имя хранимой процедуры. Чаще всего используют SQL операторы, благодаря их простоте и наглядности. Юзать оператор типа "Select * from Имя_Таблицы Where Условия" фиговое лентяйское решение. И вот почему:

1) Явно задавай все имена полей, даже если тебе нужны все поля таблицы. При анализе операторов типа Select * сервер сначала запрашивает все имена полей, а если они явно заданы, то он не будет грузить мусор.

2) Всегда выбирай только те данные, которые тебе нужны. Памяти на сервере всегда не хватает, особенно когда таких деятелей, как ты, много.

Аргумент Connection/ConnectionString содержит ссылку на открытый объект Connection или строку соединения. В последнем случае создание объекта Connection явно не требуется. Общее правило такое: если для генерации страницы используется больше одного обращения к базе данных - создавай объект Connection и юзай ссылку на него.

КУРСОР ТЕБЕ В РЕБРО!

Назад на стр. 028-020-2  Содержание  Вперед на стр. 028-020-4