Доступ к базам данных с помощью языка ASP . |
Active Server Pages — это обычные страницы, которые содержат скрипты, выполняющиеся на сервере наряду с обычным HTML-кодом. ASP изначально создавалось прежде всего для Microsoft IIS на платформе Windows + СУБД SQL Server . В настоящее время выполнение ASP -скриптов поддерживается и на других платформах (например, Web -сервером Apache 2 под Linux ). ASP позволяет перемешивать HTML-код с программным кодом, что, в свою очередь, позволяет легко и удобно встраивать серверные программы в страницы, причем первые будут выполняться только на стороне сервера. Еще одним мощным средством является поддержка ActiveX. ASP использует технологию Active Data Objects ( ADO ) для поддержки языка запросов к базам данных SQL . Ранее рассмотренная нами технология называлась DAO ( Data Access Objects - объекты доступа к данным) и являлась стандартной для VB , Access и других сред, работающих с ядром доступа к данным Microsoft Jet . DAO плохо подходит для Web и лучше всего работает в традиционных приложениях типа клиент/сервер на базе Jet . ASP поддерживает работу со всеми базами данных, соответствующими стандарту ODBC . С ASP работать очень просто. Для этого надо всего лишь вставить текст сценария ASP в пару тэгов <% %>. В остальном ASP -файл ничем не отличается от HTML -файла (за исключением, пожалуй, расширения). В сценариях ASP c равным успехом используются языки VBScript и JavaScript (реже PerlScript ). Файл , содержащий ASP- код : <%@LANGUAGE="VBScript" CODEPAGE="1251"%> <html> <head> <% MyString = Date() %> </head> <body> <% Response.Write "<h1>" & MyString & "</h1>" %> </body></html> ADO – однозначный выбор для доступа к данным при работе с Microsoft Internet Information Server ( IIS ). Прежде всего ей требуется источник данных. Источники данных могут быть различными; одним из них является ODBC ( Open Database Connectivity – открытый протокол доступа к базам данных) . Более высокой производительности позволяет добиться OLE DB (база данных OLE ), основанная на модели объектов СОМ. Для определённости положим, что наша БД или СУБД имеет свой драйвер ODBC , посредством которого можно организовать System DSN ( Data Source Name ) – системный источник данных для сетевого доступа (обычно размещаемый на том же компьютере, где и web -сервер). Для MS SQL Server это подключение выполнено автоматически. ASP -сценарий, работающий с базой данных, в первую очередь должен подключиться к ней (создать экземпляр объекта типа Connection). Вот как выглядит вариант подключения к MS SQL Server через ODBC : Set CONN = CreateObject("ADODB.Connection") CONN.Open "DSN=DSSP-SQL; UID=creator; PWD=creator; database=BOARD" Set RS = CreateObject("ADODB.Recordset") После этого можно будет выполнять инструкции SQL и создавать наборы записей. Корректное завершение работы с базой: db.Close Set db = Nothing Для работы с сервером могут быть использованы два различных объекта — Command и Recordset. Практически вся необходимая обработка данных выполняется с помощью объекта Recordset, поскольку его набор свойств и методов обеспечивает возможность универсальной обработки столбцов таблиц базы данных и помещенных в них значений. Объект Command является основополагающим в ходе выполнения любого сеанса ADO соединения с БД. Он используется для создания экземпляра объекта Recordset, по сути являющегося областью хранения промежуточных значений и предоставляющим возможность быстрого обращения к элементам (например, определенной выборки) базы данных. Это позволяет сэкономить временные и аппаратные ресурсы сервера, поскольку в данном случае транзакции с сервером выполняются лишь с целью извлечения каждого конкретного набора отдельных значений (выборки), а вся дальнейшая обработка сводится к операциям над уже извлеченным набором. Его метод Execute применяется для выполнения любых команд языка SQL, независимо от того, будут в результате выполнения команды возвращаться какие-либо данные (результаты запросов) или нет. Этот метод может использоваться и для выполнения на сервере команд администрирования или поддержки базы данных (вызов хранимых процедур — наиболее типичный случай). CONN.Execute( " delete from _Disciplines where id_discipline=9 " ) Наиважнейшим компонентом ADO является объект набора данных recordset . Набор данных — это копия определенного фрагмента базы данных в памяти компьютера, сохраняющая структуру последней. Набор данных представляет так называемое пассивное (не подключенное) к базе данных состояние, то есть фрагмент базы данных присутствует в памяти компьютера, хотя соединение с реальной базой данных уже закрыто. Этот объект предоставляет разработчику широкий набор функциональных возможностей. Коллекция Fields — важнейший элемент объекта Recordset. Она содержит информацию, необходимую для работы с выбранными из таблиц данными. Свойства, связанные с каждым из полей в коллекции, содержат его исчерпывающее описание — от установленного в таблице типа и размера этого поля до имени для реальной длины его значения. Свойство Value содержит значение, выбранное из поля таблицы. Для определения текущего типа представления данных предназначено свойство Type . Пример 1: sql ="SELECT GetDate() as Date" Set RS = CreateObject("ADODB.Recordset") RS.Open sql, CONN out=RS.Fields.Item ("Date") RS.Close Response.Write out Пример 2: Dim MyData MyData=Array() sql ="SELECT * from _Disciplines" RS.Open sql, CONN i=0 do while (not RS.EOF) redim preserve MyData(i) MyData ( i )= RS (" name ") RS . MoveNext i = i +1 loop Пара методов, AddNew и Update , позволяет добавлять новую запись к объекту Recordset и заносить значение ее полей перед добавлением в базу данных. После вызова метода AddNew полям новой записи присваиваются требуемые значения и вызывается метод Update , сохраняющий эти данные в таблице. Если не вызывать метод AddNew , вместо добавления новой записи будет выполнено обновление полей текущей записи объекта Recordset . RS.AddNew RS.Fields (“id”) = 1234 RS.Update M етод Close объекта Recordset закрывает этот объект и освобождает все связанные с ним ресурсы. По окончании работы с объектом Recordset его нужно обязательно закрыть, поскольку при этом освобождаются ресурсы и на стороне сервера. Rset.Close Set Rset = Nothing Метод MoveFirst — используется для перемещения к первой записи в наборе данных Recordset. При вызове этого метода свойству BOF автоматически присваивается значение TRUE. Метод MoveLast — используется для перемещения к следующей записи в наборе данных Recordset. При вызове этого метода свойству EOF автоматически присваивается значение TRUE. В свойство RecordCount помещается общее число записей набора данных объекта Recordset . Следует заметить, что, пока для перемещения в пределах буфера данных объекта Recordset не будет использован метод MoveLast или MoveNext , значение этого свойства будет соответствовать максимальному количеству просмотренных строк. Если один и тот же код постоянно повторяется в различных сценариях, можно переместить его в отдельный файл (расширение “. js ”), а в сценариях указывать ссылку на этот файл. Возможности ASP -сценария просмотром таблиц далеко не исчерпываются. Обычно посредством web -страниц предоставляется возможность редактировать (добавлять, изменять, удалять) записи в базе данных, сохраняя при этом конфиденциальность работы с информацией, а также осуществлять поиск. Однако структура сценария в этом случае существенно усложняется. Начиная с версии ADO 2.0 используется концепция отсоединённого состояния . Эта концепция позволяет выполнять определенные операции над копиями наборов данных в памяти компьютера, при нахождении его в неподключенном к БД состоянии. Выгода от этого двойная: во-первых, экономится дорогой клиент-серверный канал передачи информации (промежуточные результаты не передаются, операции над наборами данных выполняются локально, а следовательно, быстрее), а во-вторых, сервер освобождается от выполнения вычислительных операций. В A SP . NET эта концепция значительно развита за счет введения нового класса DataSet (далеким потомком объекта RecordSet). Обект DataSet, в частности, позволяет динамически «держать» в памяти копии целой базы данных и выполнять все вычислительные операции именно над этим представлением базы данных, обновляя реальную базу данных лишь время от времени. |