Опубликован: 10.09.2004 | Уровень: для всех | Доступ: свободно | ВУЗ: Ульяновский государственный университет
Лекция 18:

Внедрение SQL-операторов в прикладные программы

< Лекция 17 || Лекция 18: 1234

Обращение к базе данных с использованием технологии ADO

Технология Active Data Objects (ADO) - это программное расширение технологии активных серверных страниц ASP, реализованное в Web-сервере Internet Information Server (IIS) компании Microsoft с целью организации подключений к базам данных. В технологии ADO поддерживаются следующие основные функции:

  • независимо создаваемые объекты;
  • поддержка хранимых процедур с входными, выходными и возвращаемыми параметрами ;
  • курсоры различных типов (включая возможность поддержки разных специальных курсоров конечных пользователей);
  • пакетное обновление;
  • поддержка ограничений для числа возвращаемых строк или других параметров запроса;
  • поддержка нескольких наборов данных, возвращаемых хранимыми процедурами или пакетными операторами.

Основными преимуществами технологии ADO является простота использования, высокая скорость, небольшие потребности в оперативной памяти и незначительные затраты дисковой памяти.

Объектная модель ADO определяет набор ( коллекцию ) программируемых объектов, которые могут применяться с Visual Basic, Visual C++, VBScript. Объектная модель ADO разработана для выполнения большинства особенностей интерфейса OLE DB.

Если при помощи интерфейса ODBC операционная система осуществляет, как правило, доступ к реляционным БД, использующим структурированный язык запросов SQL, то интерфейс OLE DB (Object Linking and Embedding for DataBases) является более универсальной технологией для доступа к любым источникам данных.

В интерфейс OLE DB включен механизм провайдеров, под которыми понимаются поставщики данных, находящиеся в надстройке над физическим форматом данных. Их называют сервис-провайдерами, они помогают объединять в однотипную совокупность объекты, связанные с разнообразными источниками данных.

Интерфейс OLE DB может использовать для доступа к источникам данных интерфейс ODBC. В этом случае применяется провайдер OLE DB для доступа к ODBC-данным. Таким образом, интерфейс OLE DB не заменяет интерфейс ODBC, а позволяет организовать доступ к источникам данных через различные интерфейсы, и в том числе через ODBC.

ADO содержит семь объектов, которые инкапсулируют в себе большинство операций с базой данных - Connection ( соединение ), Command ( команда ), Parameter ( параметр ), Recordset ( набор данных ), Field (поле), Property (свойство) и Error (ошибка), - а также четыре набора объектов ( коллекции ) - Fields (поля), Properties (свойства), Parameters ( параметры ) и Errors (ошибки).

Объект Connection устанавливает коммуникационную связь между приложением и источником данных, позволяет выполнять команды. Класс Connection включает следующие методы:

  • Open ( Close ) - установление (закрытие) физического соединения с источником данных;
  • Execute - выполнение команды для этого соединения ;
  • BeginTrans, CommitTrans, RollbackTrans - управление транзакциями для текущего подключения, включая вложенные транзакции, если источник данных поддерживает работу с ними.

Объект Command. Команда, направляемая в базу данных, как правило, представляет собой SQL-команду или вызов некоторой хранимой процедуры. Объект Command может настраиваться с помощью параметров, задаваемых посредством создания коллекции объектов класса Parameter. Класс Command включает следующие методы:

  • Execute - выполнение команды для данного соединения ;
  • CreateParameter - создание нового объекта класса Parameter.

Коллекция Parameters. Содержит любые параметры, которые используются вместе с данным объектом Command. Класс Parameters содержит следующие методы:

  • Append ( Delete ) - добавление (удаление) параметра для указанной коллекции ;
  • Item - извлечение определенного объекта Parameter.

На некоторый объект Parameter в коллекции Parameters можно ссылаться, используя его порядковый номер или значение, присвоенное свойству Name этого объекта.

Объект Recordset представляет набор записей, полученный в результате выполнения запроса в базе данных. При создании объекта Recordset указатель текущей записи устанавливается на его первую запись (если таковая имеется), а свойствам BOF и EOF присваивается значение FALSE. Если никаких записей нет, то свойству Recordcount присваивается значение 0, а свойствам BOF и EOF - значение TRUE. Класс Recordset включает следующие методы:

  • MoveFirst, MoveLast, MoveNext, MovePrevious и Move - производят перемещение указателя текущей записи в предположении, что провайдер поддерживает выполнение соответствующей функции. В однонаправленных объектах Recordset поддерживается только метод MoveNext. При использовании указанных методов для перемещения по записям результирующего набора для обнаружения его начала и конца могут применяться свойства BOF и EOF объекта Recordset ;
  • AddNew, Update, Delete - осуществляют добавление новых записей, обновление и удаление имеющихся записей, связанных с открытым объектом;
  • Open ( Close ) - выполняют открытие (закрытие) курсора, представляющего результаты выполнения команды.

Коллекция Fields. Объект Recordset содержит коллекцию Fields, состоящую из объектов класса Field, каждый из которых соответствует столбцу данных объекта Recordset. Как и при работе с объектами Parameter, на отдельный объект Field в коллекции Fields можно ссылаться, используя его порядковый номер или имя.

Объект Connection

Рассмотрим возможность соединения с базой данных из языков сценариев.

ASP -сценарий, работающий с базой данных, в первую очередь должен подключиться к ней. После этого можно выполнять инструкции SQL и создавать наборы записей. Существует специальный объект Connection, управляющий подключением к базе данных.

Объект Connection позволяет устанавливать сеансы связи с источниками данных; он обеспечивает функционирование механизма для инициализации и установления соединения, выполнения запросов и использования транзакций.

Создание соединения с базой данных включает следующие шаги:

  • сначала вызывается метод CreateObject() объекта Server, создающий объектную переменную cn типа Connection. Объект Connection определен в библиотеке ADODB:
    Dim cn
    Set cn=Server.CreateObject("ADODB.Connection")
  • далее можно использовать метод Open объекта Connection для установки соединения c провайдером ODBC. Провайдер определяется посредством установки свойства Provider. Если оно не определено, то по умолчанию будет использован провайдер MSDASQL - это сокращенное название драйвера OLE DB Microsoft для SQL Server:
    cn.provider "MSDASQL"
  • затем вызывается метод Open() объекта Connection, открывающий соединение с заданным источником данных.

Сослаться на базу данных SQL Server из ASP -сценария возможно двумя способами:

  • путем создания источника данных ( DSN );
  • с помощью строки соединения (без применения DSN ).

В первом случае созданный заранее источник данных с именем mystud используется для соединения с базой данных следующим образом:

cn.open "mystud","user1","123"

Здесь для метода Open указывается DSN базы данных, имя пользователя и пароль.

Во втором случае строки соединения содержат всю информацию, необходимую ADO для того, чтобы создать соединение с внешним источником данных. Пример такой строки:

"uid=user1;driver={SQL Server};server=its;
    database=basa_user1"

Строка создает соединение с базой данных basa_user1 на MS SQL Server с именем its, используя драйвер для SQL Server и имя пользователя user1. Если нужен пароль, то необходимо добавить подстроку pwd=<пароль>:

"uid=user1;pwd=123;driver{SQL Server};
server=its;
database=basa_user1"

Такая строка подойдет для соединения с базой данных в тексте сценария вместо источника данных:

cn.open "uid=user1;driver={SQL Server};
    server=its;
    database=basa_user1"

или

cn.open "uid=user1; pwd=123; 
    driver={SQL Server}; 
    server=its;database=basa_user1"

Опустив некоторые подробности работы с API-интерфейсом, приведем небольшой фрагмент сценария на языке VBScript для серверной стороны, выполняющий выборку и изменение информации в базе данных учебного примера.

Dim cn
Dim rst
Set cn=Server.CreateObject("ADODB.Connection")
Set rst=Server.CreateObject("ADODB.Recordset")
cn.open "uid=user1;pwd=123;
    driver={SQL Server};
    server=its;database=basa_user1"
rst.open "SELECT название, тип, цена 
    FROM товар", cn
do until rst.eof
    response.write rst.fields(0) 
    response.write rst.fields(1) 
    response.write rst.fields(2) & "<br>"
    rst.movenext
loop
18.3. Выполнение статического SQL-запроса к учебной базе данных из VBScript-сценария.

Пример 18.4. Выполнение динамического SQL-запроса к учебной базе данных из VBScript-сценария.

Для создания динамического запроса изменения данных на сервере воспользуемся объектом Command с параметрами.

Dim cn
Dim rst
Dim cmd
Set cn=Server.CreateObject("ADODB.Connection")
Set rst=Server.CreateObject("ADODB.Recordset")
Set cmd=Server.CreateObject("ADODB.Command")
cn.open "uid=user1;pwd=123;
    driver={SQL Server};
    server=its;database=basa_user1"
Set cmd.ActiveConnection=cn
Dim prm1, prm2
' создание параметров 
prm1=Server.CreateObject("ADODB.Parameter")
prm2=Server.CreateObject("ADODB.Parameter")
' определение динамического запроса
cmd.CommandText="update товар set цена=? 
    where название=?"
cmd.CommandType=adCmdText
cmd.Prepared=True
' определение параметра, соответствующего 
' первому знаку ? в SQL-запросе
Set prm1=сmd.CreateParameter("par1", 
    adInteger, adParamInput, , 160)
' определение параметра, соответствующего 
' второму знаку ? в SQL-запросе
Set prm2=сmd.CreateParameter("par2", adChar,
    adParamInput,20 , "Трюфели" )
' добавление параметров в коллекцию параметров
cmd.Parameters.Append prm1
cmd.Parameters.Append prm2
' выполнение SQL-запроса
cmd.Execute
18.4. Выполнение динамического SQL-запроса к учебной базе данных из VBScript-сценария.
< Лекция 17 || Лекция 18: 1234
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Ирина Мельник
Ирина Мельник

Здравствуйте, записалась на курс основы SQL, подскажите, стоимость курса.