Опубликован: 20.02.2006 | Доступ: свободный | Студентов: 3421 / 400 | Оценка: 4.34 / 3.99 | Длительность: 21:22:00
ISBN: 978-5-9570-0022-1
Лекция 12:

Программирование на ASP

< Лекция 11 || Лекция 12: 123456789

Объект Server

ASP часто используется для получения данных из хранилища информации, применения к ним некоторой бизнес-логики и отображения информации в браузере. Все эти задачи можно выполнить с помощью ASP, однако многие веб-программисты используют для этой цели другие программные библиотеки. ASP не содержит внутренней библиотеки для считывания источников данных, тем не менее, объект Server поддерживает функцию создания экземпляра объекта COM. Экземпляром объекта является любой объект COM с интерфейсом, который можно считать с помощью VBScript. Распространенный объект COM или набор объектов для считывания данных из источников называется Active Data Objects (ADO).

Доступ к данным с помощью ADO

Целью разработки технологии ADO является предоставление разработчику универсального решения относительно доступа к данным для всех источников информации. В идеальном случае ADO выступает в роли абстракции между кодом бизнес-логики и источником данных любого вида. Изменяя набор параметров, указывающих на расположение источника данных, программа продолжает считывать и записывать данные в источник без корректирования кода. В настоящее время ADO обеспечивает такой тип абстракции между источниками данных с аналогичной структурой данных. Например, код ADO, используемый для считывания и записи данных в базу данных SQL Server, позволяет производить те же самые действия с информацией в базе данных Oracle без изменения кода.

Наследование технологий доступа к данным. Microsoft выпустила также такие библиотеки доступа к данным, как Data Access Objects (DAO) и Remote Data Objects (RDO). DAO реализует великолепную возможность управления и обработки программистом набора данных, извлеченных из базы данных, однако не позволяет выполнять асинхронный запрос базы данных "клиент-сервер", расположенной на сервере. RDO имеет более скромные возможности обработки и управления данными, полученными из базы данных, но при этом содержит несколько программ, позволяющих эффективно извлекать данные из базы данных типа "клиент-сервер", находящейся на сервере. Обе технологии считаются устаревшими, в настоящее время не поддерживаются, и использовать их не следует. ADO дает программисту оптимальные решения в любых ситуациях; эта технология стала основной технологией для доступа к данным Microsoft. ADO имеет множество функций по управлению и обработке данных, извлеченных из базы данных, а также по подключению к базе данных.

Использование ADO в ASP. Код ASP, осуществляющий доступ к базе данных для отображения набора записей, должен использовать команду Server.CreateObject для реализации технологии ADO. Все COM-объекты имеют имена и зарегистрированы на несущем сервере. Имена COM-объектов исключают проблемы, связанные с нахождением нужной библиотеки, посредством абстрагирования ее расположения на узле от работы по обращению к библиотеке. Объект COM указывается только по его имени. Команда Server.CreateObject использует имя объекта COM в виде <имя библиотеки>.<имя класса> в качестве аргумента функции. Экземпляр объекта COM возвращается переменной, установленной на вызов функции.

ADO представляет собой группу объектов COM, поэтому команда Server.CreateObject используется при создании различных объектов для подключения к базе данных, считывании из нее наборов записей и передачи этих значений в браузер. В листинге 12.6 показан демонстрационный код ASP, осуществляющий считывание простого набора записей из таблицы базы данных и передающий данные в браузер.

<%@ Language=VBScript %>

<HTML>
<HEAD>
<title>read a database table</title>
</HEAD>
<BODY>

<%

dim myConn 
dim myRecordset
dim sSQL
dim sResult
dim sConn 'For database connection string 

     'create connection string 
     sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" 
     sConn = sConn & "Data Source=C:\aspData\employees.mdb;"
     
     'establish connection
     Set myConn = Server.CreateObject("ADODB.Connection")
     myConn.Open sConn
     
     'create the recordset
     set myRecordset = Server.CreateObject("ADODB.Recordset")

     'build SQL command
     sSQL = "SELECT first_name, last_name FROM tblEmployee"

     'open the recordset from the database
     myRecordset.Open sSQL, myConn

     'check if there are any values in the recordset
     if not( myRecordset.BOF and myRecordset.EOF) then
     
          'loop through the recordset until the end record
          while(not myRecordset.EOF) 
              'build output string 
              sResult = myRecordset("first_name") & " " 
              sResult = sResult &  _
                        myRecordset("last_name") & "<br />"
               
              'write value to browser
              Response.write(sResult)
               
              'advance recordset
              myRecordset.moveNext()
          wend
          
     else
          'let us know that there were no values
          Response.write("nothing returned")
     end if
     
     'shut down recordset and connection objects
     myRecordset.Close()
     myConn.Close()
%>

</body>
</html>
Листинг 12.6. readDB.asp - ASP Opening a Recordset from a Database and Printing the Contents to the Web Browser

Объект подключения ADO. Первым объектом, создаваемым в коде листинга 12.6, является объект подключения ADO. Библиотеке ADO присваивается имя ADODB, а в качестве имени класса используется "Connection". Таким образом, команда создания объекта выглядит следующим образом:

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

Переменная myConn указывает на экземпляр класса ADO Connection. Класс Connection осуществляет хранение и передачу данных доступа к источнику данных. В листинге 12.6 строка Object Linking and Embedding database (OLE для баз данных) (OLE-DB) открывает подключение к базе данных Microsoft Access, расположенной на сервере.

База данных Microsoft Access. Использование базы данных Microsoft Access на одном узле с веб-сервером является хорошим способом быстрого доступа к данным при работе с небольшими наборами данных (размер которых не превышает 300 Мб). Уровень производительности в зависимости от размера набора данных может сильно меняться в зависимости от узла и приложения, поэтому нужно загружать тест для определения предела производительности. Использование файла базы данных Access не влияет на производительность, но для управления данными таким способом (не с помощью команд SQL в коде ASP) придется приобрести программу Microsoft Access. Microsoft Access обеспечить более быстрый доступ к данным при работе с небольшими наборами данных в отличие от дорогостоящих СУБД типа Microsoft SQL Server или Oracle.

Тем не менее, Microsoft Access имеет множество ограничений при управлении большими наборами данных. Microsoft Access не обеспечивает функциональных возможностей SQL Server и Oracle. Эта программа представляет собой популярную утилиту чтения и записи файлов, поскольку ресурс, из которого запрашиваются данные, предоставляется приложением-потребителем. В ASP ресурс данных для запроса предоставляется IIS. Тем не менее, прямо противоположным случаем является база данных уровня предприятия, при работе с которой источник данных для запроса ограничивается узлом. Разрешения на доступ к базе данных Microsoft Access устанавливаются настройкой файловых разрешений. В примерах, приводимых в данной лекции, учетной записи службы IIS с именем IUSER_<имя компьютера> (где имя компьютера – это имя узла) нужно предоставить разрешения на чтение и запись в файл базы данных Microsoft Access .mdb. Файл Microsoft Access имеет расширение .mdb и определяется в строке подключения OLE-DB.

Объект набора записей ADO. В рассматриваемом процессе участвует еще один объект ADO с именем recordset – объект набора записей. С его помощью программист осуществляет доступ к информации в наборе данных, их чтение и запись в источник. Набор записей открывается с помощью команды SQL и экземпляра объекта подключения MyConn. После вызова функции Open объекта набора записей этот набор можно считать и записать в браузер. Однако предварительно его нужно проверить на наличие в нем записей. Набор является пустым, если оба условия – BOF (начало файла) и EOF (конец файла) – принимают значение true (истина). При первом открытии подразумевается, что набор записей указывает на первую запись. Переход к следующей записи в наборе выполняется с помощью функции moveNext объекта recordset. При каждом вызове команды moveNext нужно проверять условие EOF. Если условие EOF истинно, то выполнен переход к концу файла. Выполнение команды moveNext по достижении условия EOF вызовет ошибку. Пока условие EOF не является истинным, в наборе записей можно выполнять переход к следующей записи. После завершения работы с базой данных объекты набора записей и подключения необходимо закрыть.

Результатом выполнения кода (см. листинг 12.6) является отображение в браузере имени, пробела и фамилии из каждой записи в таблице tblEmployee базы данных. Файл ASP можно усовершенствовать для реализации отправки конечным пользователем информации в таблицу с данными. В листинге 12.7 приведен фрагмент ASP-кода ( ReadWriteDB.asp ), отображающий данные из таблицы tblEmployee, который позволяет пользователю отправить дополнительные данные для записи в базу данных.

<HTML>
<HEAD>
<title>read and write to a database table</title>
</HEAD>
<BODY>

<%
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'main entry point to ASP
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

dim myConn 'For ADO connection 
dim sSQL 'For SQL command

dim sConn 'For database connection string 

     'create connection string 
     sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" 
     sConn = sConn & "Data Source=C:\aspData\employees.mdb;"

     'establish connection to database server
     Set myConn = Server.CreateObject("ADODB.Connection")
     myConn.Open sConn
     
     'get parameters from user submission
     AddData myConn
     
     'build SQL command to show what exists in database
     sSQL = "SELECT * FROM tblEmployee"

     'show the data
     ShowUserRecordset sSQL, myConn

%>
<FORM METHOD = "POST" ACTION = "ReadWriteDB.asp" 
ID = "frmFields" NAME = "getInfo" >
<% 
     'build the data entry table
     MakeDataEntryTable sSQL, myConn
     
     'close up connection since we are done
     myConn.Close()
     
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'End of ASP
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     
%>     
<INPUT ID="subFull" NAME="subR" TYPE="submit" VALUE="Add" >
</FORM>
</body>
</html>
Листинг 12.7. Part of ReadWriteDB.asp Showing Main Entry Point of ASP

Файл ReadWriteDB содержит еще три подпрограммы, которые исключены из листинга 12.7 для сокращения его объема. Листинг 12.7 показывает главную точку входа ASP-кода ReadWriteDB, в которой расширение ISAPI ASP.DLL начинает выполнять код серверной части. Дополнительными подпрограммами файла ReadWriteDB.asp, исключенными из листинга 12.7, являются следующие:

  • sub ShowUserRecordset. С помощью команды SQL и переданного экземпляра объекта ADO Connection подпрограмма выводит содержимое набора записей в браузере;
  • sub MakeDataEntryTable. С помощью команды SQL и переданного экземпляра объекта ADO подпрограмма выводит таблицы с именами полей в качестве заголовков и передает браузеру данные о полях;
  • sub AddData. Подпрограмма проверяет объект Request на предмет отправки данных и вставляет переданные пользователем данные в таблицу базы данных с именем tblEmployee.
< Лекция 11 || Лекция 12: 123456789
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Владимир Кирин
Владимир Кирин
Неполодки на ресурсе.При сдаче 7 теста, открывается пустое окно, и ничего не происходит.Поправте пожалуйста. При этом попытка считается защитана, перездача только через 30 мин. Использую браузер опера.
Александр Белов
Александр Белов
Эстония, Таллин