Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11631
Последний выпуск: 19.06.2015

ASP - Доступ к источнику данных

Объекты ADO (ActiveX Data Objects) представляют собой простую, но мощную технологию предоставления доступа к базам данных с веб-страниц. Объекты ADO позволяют писать компактные и расширяемые сценарии для подключения к совместимым с интерфейсом OLE DB источникам данных, например, базам данных, электронным таблицам, последовательным файлам данных или каталогам электронной почты. OLE DB представляет собой программный интерфейс системного уровня, который предоставляет стандартный набор интерфейсов COM для обеспечения работы системы управления данными. С помощью модели объектов ADO нетрудно получить доступ к этим интерфейсам (с помощью языков сценариев, таких как VBScript или JScript) для добавления в свои веб-приложения работы с базами данных. Кроме того, можно использовать интерфейс ADO для доступа к базам данных, совместимым со стандартом ODBC (Open Database Connectivity).

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

Для получения дополнительных сведений об интерфейсе ADO посетите веб-узел UDA (Microsoft Universal Data Access) по адресу http://www.microsoft.com/data/.

Создание строки подключения

Первый шаг по созданию веб-приложения с доступом к данным состоит в указании способа, с помощью которого интерфейс ADO находит и задает источник данных. Это выполняется с помощью строки подключения, — набора разделенных точкой с запятой аргументов, определяющих такие параметры, как поставщик данных и размещение источника данных. Интерфейс ADO использует строку подключения для задания поставщика OLE DB и направляет этого поставщика на источник данных. Поставщик данных является компонентом, который представляет источник данных, а также предоставляет сведения для приложения в форме наборов строк.

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

Источник данных (Data Source) Строка подключения OLE DB
Microsoft® Access Provider=Microsoft.Jet.OLEDB.4.0;Data Source=физический путь к файлу .mdb
Microsoft SQL Server Provider=SQLOLEDB.1;Data Source=путь к базе данных на сервере
Oracle Provider=MSDAORA.1;Data Source=путь к базе данных на сервере
Microsoft Indexing Service Provider=MSIDXS.1;Data Source=путь к файлу

Для обеспечения обратной совместимости поставщик данных OLE DB для ODBC поддерживает синтаксис строк подключения ODBC. В следующей таблице содержатся типичные строки подключения ODBC:

Драйвер источника данных (Data Source Driver) Строка подключения ODBC
Microsoft Access Driver={Microsoft Access Driver (*.mdb)};DBQ=физический путь к файлу .mdb
SQL Server DRIVER={SQL Server};SERVER=путь к серверу
Oracle DRIVER={Microsoft ODBC for Oracle};SERVER=путь к серверу
Microsoft Excel Driver={Microsoft Excel Driver (*.xls)};DBQ=физический путь к файлу .xls; DriverID=278
Microsoft Excel 97 Driver={Microsoft Excel Driver (*.xls)};DBQ=физический путь к файлу .xls;DriverID=790
Paradox Driver={Microsoft Paradox Driver (*.db)};DBQ=физический путь к файлу .db;DriverID=26
Текст Driver={Microsoft Text Driver (*.txt;*.csv)};DefaultDir=физический путь к файлу .txt
Microsoft Visual FoxPro® (с контейнером баз данных) Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDb=физический путь к файлу .dbc
Microsoft Visual FoxPro (без контейнера баз данных) Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDb=физический путь к файлу .dbf

Примечание.   Для строк подключения, которые используют путь в формате UNC для ссылки на источник данных, расположенный на удаленном компьютере, могут возникнуть неполадки, связанные с безопасностью. Чтобы предотвратить несанкционированный доступ к вашему источнику данных, создайте учетную запись Windows для компьютеров, которым требуется доступ к этим данным, а затем примените соответствующие разрешения NTFS к источнику данных. Для получения дополнительных сведений см. раздел Защита файлов средствами NTFS.

Дополнительные вопросы разработки веб-приложений с доступом к данным

Чтобы при обслуживании веб-приложений, доступ к данным которых одновременно осуществляют более 10 пользователей, обеспечить высокое быстродействие и надежность работы, настоятельно рекомендуем использовать обработчик баз данных типа "клиент-сервер". Хотя интерфейс ADO работает с любым источником данных, совместимым со стандартом OLE DB, он был разработан и лучше всего проверен для работы с базами данных типа "клиент-сервер", такими как Microsoft SQL Server или Oracle.

Страницы ASP поддерживают в качестве допустимых источников данных базы данных с общими файлами (Microsoft Access или Microsoft FoxPro). Хотя некоторые примеры в документации ASP используют базу данных с общим файлом, желательно использовать обработчики таких типов баз данных только для средств разработки или для ограниченных сценариев развертывания. Базы данных с общими файлами могут хуже подходить для профессионально разработанных веб-приложений, которые должны обслуживать большое число запросов, по сравнению с базами данных типа "клиент-сервер".

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

  • Выбор схемы подключения для SQL Server. Имеется возможность выбрать один из двух методов доступа к удаленной базе данных SQL Server: соединители TCP/IP и именованные каналы. Для именованных каналов проверка подлинности клиентов баз данных должна выполняться с помощью Windows перед установкой подключения. При этом имеется возможность, что удаленный компьютер, на котором запущены именованные каналы, откажет в доступе пользователю, имеющему необходимые учетные сведения для доступа к SQL Server, но не имеющему учетной записи пользователя Windows на данном компьютере. Напротив, подключения с помощью соединителей TCP/IP напрямую соединяются с сервером баз данных, без использования промежуточного компьютера, как при использовании именованных каналов. И поскольку подключения, выполненные с помощью соединителей TCP/IP соединяются напрямую с сервером баз данных, пользователи могут получить доступ через проверку подлинности SQL Server, а не через проверку подлинности Windows.
  • Ошибка ODBC 80004005. Если схема подключения для доступа к SQL Server задана неправильно, пользователи, просматривающие приложение с доступом к базам данных, могут получить сообщение об ошибке ODBC 80004005. Для исправления ситуации попробуйте использовать вместо сетевых подключений локальные подключения через именованный канал, если SQL Server запущен на том же компьютере, что и службы IIS. Правила безопасности Windows 2000 не будут использованы, поскольку канал является локальным, а не сетевым подключением, которое может олицетворяться с помощью учетной записи анонимного пользователя. Крое того, в строке подключения к SQL Server (либо в файле Global.asa, либо в сценарии страничного уровня) измените параметр SERVER=имя сервера на SERVER=(local). Ключевое слово (local) является специальным параметром, распознаваемым ODBC драйвером SQL Server. Если это решение не работает, попробуйте использовать протокол без проверки подлинности для связи между IIS и SQL Server, например соединители TCP/IP. Этот протокол будет работать при локальном запуске SQL Server или на удаленном компьютере.
  • Примечание.   Для увеличения быстродействия при подключении к удаленным базам данных воспользуйтесь соединителями TCP/IP.

  • Безопасность SQL Server. При использовании встроенных или смешанных средств безопасности SQL Server и при размещении базы данных SQL Server на удаленном сервере невозможно использование встроенной проверки подлинности Windows. Специфика заключается в том, что невозможно пересылать учетные сведения для встроенной проверки подлинности Windows на удаленный компьютер. Это означает, что может потребоваться использовать обычную проверку подлинности, при которой требуется ввод имени пользователя и пароля.

Для получения дополнительных сведений по этим вопросам посетите веб-узел Microsoft Product Support Services по адресу http://www.microsoft.com/support/.

Подключение к источнику данных

Интерфейс ADO предоставляет объект Connection для установления и обработки связей между приложением и совместимыми со стандартом OLE DB источниками данных или совместимыми со стандартом ODBC базами данных. Объект Connection имеет свойства и методы, которые можно использовать для открытия и закрытия подключений к базам данных, а также для выполнения запросов на обновление данных.

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

<%
  'Create a connection object.

  Set cnn = Server.CreateObject("ADODB.Connection")
  'Open a connection using the OLE DB connection string.
  cnn.Open  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MarketData\ProjectedSales.mdb"
%>

Примечание.   Строка подключения не содержит пробелы перед или после знака равено (=).

В этом случае для объекта Connection строку подключения указывает метод Open.

Выполнение SQL-запросов с помощью объекта Connection

С помощью метода Execute объекта Connection можно выдавать команды для источников данных, например SQL-запросы (Structured Query Language). (Язык SQL является стандартным языком, используемым для связи с базами данных, и определяет команды для получения и обновления данных.) Метод Execute может принимать параметры, задающие команду (или запрос), число обрабатываемых записей данных и тип используемой команды.

Следующий сценарий использует метод Execute для выдачи запроса в форме SQL-команды INSERT, которая вставляет данные в определенную таблицу базы данных. В данном случае блок сценария вставляет имя Jose Lugo в таблицу базы данных с именем Customers.

<%
  'Define the OLE DB connection string.
  strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"

  'Instantiate the Connection object and open a database connection.
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open strConnectionString

  'Define SQL SELECT statement.
  strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jose','Lugo')"

  'Use the Execute method to issue a SQL query to database.
  cnn.Execute strSQL,,adCmdText + adExecuteNoRecords
%>

Следует отметить, что два указанных в инструкции параметра используются для выполнения запроса: adCmdText и adExecuteNoRecords. Необязательный параметр adCmdText задает тип команды, указывая, что поставщик должен использовать инструкцию запроса (в данном случае, SQL-запрос) в качестве текстового определения команды. Параметр adExecuteNoRecords указывает ADO не создавать набор записей данных, если в приложение не возвращаются результаты. Это параметр работает только с типами команд, определенными в текстовом виде, например с SQL-запросами или сохраненными процедурами баз данных. Хотя параметры adCmdText и adExecuteNoRecords являются необязательными, следует указывать эти параметры при использовании метода Execute для повышения быстродействия приложения с доступом к данным.

Важно!   Параметры ADO, такие как adCmdText, должны быть определены перед их использованием в сценарии. Удобный способ определения параметров состоит в использовании библиотеки типов компонентов, которая представляет собой файл, содержащий определения для всех параметров ADO. Для применения такой библиотеки необходимо сначала описать ее. Чтобы определить библиотеку типов ADO, добавьте следующий тег <METADATA> в свой файл .asp или файл Global.asa:

<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->

Дополнительные сведения о применении библиотек типов компонентов см. в подразделе Использование констант раздела Использование переменных и констант.

В дополнение к команде SQL INSERT можно использовать команды SQL UPDATE и DELETE для изменения и удаления информации в базе данных.

С помощью команды SQL UPDATE можно изменить значения элементов в таблице базы данных. Приведенный ниже сценарий использует команду UPDATE для изменения значения поля FirstName в таблице Customers на Jeff для всех записей, в которых поле LastName содержит фамилию Smith.

<%
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"
  cnn.Execute "UPDATE Customers SET FirstName = 'Jeff' WHERE LastName = 'Smith' ",,adCmdText + adExecuteNoRecords
%>

Чтобы удалить определенные записи из таблицы базы данных, используйте команду SQL DELETE. Приведенный ниже сценарий удаляет из таблицы Customers все строки, в которых фамилия равна Smith:

<%
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"
  cnn.Execute "DELETE FROM Customers WHERE LastName = 'Smith'",,adCmdText + adExecuteNoRecords
%>

Примечание.   Следует быть очень внимательным при использовании команды SQL DELETE. Команда DELETE без сопутствующего предложения WHERE удалит все строки из таблицы. Проверьте наличие предложения SQL WHERE, которое указывает конкретные удаляемые строки.

Использование объекта Recordset для обработки результатов

Для извлечения данных, проверки результатов и внесения изменений в базу данных ADO предоставляет объект Recordset. Как подразумевает его имя, объект Recordset имеет возможности, которые можно использовать (в зависимости от ограничений запроса) для извлечения и отображения набора строк базы данных, или записей. Объект Recordset поддерживает положение каждой записи, возвращенной запросом, предоставляя возможность просматривать результаты по одному элементу.

Извлечение набора записей

Успешно выполняемые веб-приложения используют объект Connection для установления соединения и объект Recordset для обработки возвращенных данных. Комбинируя специализированные функции обоих объектов, можно разработать приложение для работы с базой данных, выполняющее практически любую задачу обработки. Например, приведенный ниже сценарий на стороне сервера использует объект Recordset для выполнения команды SQL SELECT. Команда SELECT извлекает определенный набор информации на основании ограничений, налагаемых запросом. Запрос также содержит предложение SQL WHERE, используемое для сужения результатов запроса заданным условием. В данном примере предложение WHERE ограничивает запрос всеми записями в таблице Customers базы данных, имеющими фамилию Smith.

<%
  'Establish a connection with data source.
  strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open strConnectionString

  'Instantiate a Recordset object.
  Set rstCustomers = Server.CreateObject("ADODB.Recordset")

  'Open a recordset using the Open method
  'and use the connection established by the Connection object.
  strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "
  rstCustomers.Open  strSQL, cnn

  'Cycle through record set and display the results
  'and increment record position with MoveNext method.
   Set objFirstName = rstCustomers("FirstName")
   Set objLastName = rstCustomers("LastName")
   Do Until rstCustomers.EOF
     Response.Write objFirstName & " " & objLastName & "<BR>"
     rstCustomers.MoveNext
   Loop

%>

Обратите внимание, что в предыдущем примере объект Connection устанавливает подключение к базе данных, а объект Recordset использует то же самое подключение для извлечения результатов из базы данных. Данный метод является предпочтительным, если необходимо точно настроить способ установления соединения с базой данных. Например, если необходимо указать время задержки перед прекращением попыток подключения, необходимо использовать объект Connection для установки этого свойства. Однако если нужно просто установить соединение с помощью свойств соединения ADO, заданных по умолчанию, для установления соединения можно использовать метод Open объекта Recordset:

<%
  strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Employees.mdb"
  strSQL = "SELECT FirstName, LastName FROM Customers WHERE LastName = 'Smith' "
  Set rstCustomers = Server.CreateObject("ADODB.Recordset")

  'Open a connection using the Open method
  'and use the connection established by the Connection object.
  rstCustomers.Open  strSQL, strConnectionString

  'Cycle through the record set, display the results,
  'and increment record position with MoveNext method.
   Set objFirstName = rstCustomers("FirstName")
   Set objLastName = rstCustomers("LastName")
   Do Until rstCustomers.EOF
      Response.Write objFirstName & " " & objLastName & "<BR>"
      rstCustomers.MoveNext
   Loop
%>

Если подключение устанавливается с помощью метода Open объекта Recordset, неявно используется объект Connection для обеспечения безопасности соединения. Дополнительные сведения см. в документации Microsoft ActiveX Data Objects (ADO), доступной на веб-узле Microsoft Universal Data Access по адресу http://www.microsoft.com/data/.

Примечание.   Чтобы существенно повысить быстродействие приложений ASP, работающих с базами данных, предусмотрите кэширование набора данных в состоянии Application. Дополнительные сведения см. в разделе Кэширование данных.

Часто бывает полезно считать число записей, возвращаемых в наборе записей. Метод Open объекта Recordset позволяет указать необязательный параметр cursor, определяющий способ извлечения и перемещения по набору записей. Добавляя параметр курсора adOpenKeyset к инструкции, выполняющей запрос, клиентскому приложению предоставляется возможность полного просмотра набора записей. В результате, приложение может использовать свойство RecordCount для точного подсчета числа записей в наборе записей. См. приведенный ниже пример:

<%
	Set rs = Server.CreateObject("ADODB.Recordset")
	rs.Open "SELECT * FROM NewOrders", "Provider=Microsoft.Jet.OLEDB.3.51;Data Source='C:\CustomerOrders\Orders.mdb'", adOpenKeyset, adLockOptimistic, adCmdText

	'Use the RecordCount property of the Recordset object to get count.
	If rs.RecordCount >= 5 then
	  Response.Write "We've received the following " & rs.RecordCount & " new orders<BR>"

	  Do Until rs.EOF
	  	Response.Write rs("CustomerFirstName") & " " & rs("CustomerLastName") & "<BR>"
		Response.Write rs("AccountNumber") & "<BR>"
		Response.Write rs("Quantity") & "<BR>"
		Response.Write rs("DeliveryDate") & "<BR><BR>"
	      	rs.MoveNext
	  Loop

  	Else
	  Response.Write "There are less than " & rs.RecordCount & " new orders."
	End If

   rs.Close
%>

Усовершенствование запросов с помощью объекта Command

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

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

<%
    'Open a connection using Connection object. Notice that the Command object
    'does not have an Open method for establishing a connection.
    strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"
    Set cnn = Server.CreateObject("ADODB.Connection")
    cnn.Open strConnectionString

    'Instantiate Command object; use ActiveConnection property to attach
    'connection to Command object.
    Set cmn= Server.CreateObject("ADODB.Command")
    Set cmn.ActiveConnection = cnn

    'Define SQL query.
    cmn.CommandText = "INSERT INTO Inventory (Material, Quantity) VALUES (?, ?)"

    'Save a prepared (or pre-compiled) version of the query specified in CommandText
    'property before a Command object's first execution.
    cmn.Prepared = True

    'Define query parameter configuration information.
    cmn.Parameters.Append cmn.CreateParameter("material_type",adVarChar, ,255 )
    cmn.Parameters.Append cmn.CreateParameter("quantity",adVarChar, ,255 )

    'Define and execute first insert.
    cmn("material_type") = "light bulbs"
    cmn("quantity") = "40"
    cmn.Execute ,,adCmdText + adExecuteNoRecords

    'Define and execute second insert.
    cmn("material_type") = "fuses"
    cmn("quantity") = "600"
    cmn.Execute ,,adCmdText + adExecuteNoRecords
    .
    .
    .
  %>

Важно!   Параметры ADO, например adCmdText, являются просто переменными, это означает, что перед использованием параметра ADO в сценарии, осуществляющем доступ к данным, необходимо определить его значение. Поскольку ADO использует большое число параметров, наиболее простым способ определения параметров является использование библиотеки типов компонента — файла, содержащего описание каждого параметра и каждой константы ADO. Дополнительные сведения о применении библиотеки типов ADO см. в подразделе Использование констант раздела Использование переменных и констант.

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

  strSQL = "INSERT INTO Customers (FirstName, LastName) VALUES ('Robert','O'Hara')" 

Обратите внимание, что фамилия O'Hara содержит апостроф, который вступает в конфликт с апострофами, используемыми как ограничители данных в ключевом слове SQL VALUES. Привязав значение строки запроса к параметру объекта Command, можно избежать проблем этого типа.

Объединение форм HTML и доступа к базе данных

Веб-страницы, содержащие формы HTML, могут позволять пользователям запрашивать базу данных в удаленном режиме и извлекать определенные сведения. С помощью ADO можно создать удивительно простые сценарии, которые собирают информацию из пользовательских форм, создают настраиваемый запрос к базе данных и возвращают информацию пользователю. Используя объект ASP Request, можно извлечь информацию, введенную в форму HTML, и включить эти сведения в предложения SQL. Например, приведенный ниже фрагмент сценария вставляет сведения, предоставляемые формой HTML, в таблицу. Сценарий собирает сведения от пользователей с помощью семейства Form объекта Request.

<%
  'Open a connection using Connection object. The Command object
  'does not have an Open method for establishing a connection.
   strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\CompanyCatalog\Seeds.mdb"
 	Set cnn = Server.CreateObject("ADODB.Connection")
 	cnn.Open strConnectionString

  'Instantiate Command object
  'and  use ActiveConnection property to attach
  'connection to Command object.
  Set cmn= Server.CreateObject("ADODB.Command")
  Set cmn.ActiveConnection = cnn

  'Define SQL query.
  cmn.CommandText = "INSERT INTO MySeedsTable (Type) VALUES (?)"

  'Define query parameter configuration information.
  cmn.Parameters.Append cmn.CreateParameter("type",adVarChar, ,255)

  'Assign input value and execute update.
  cmn("type") = Request.Form("SeedType")
  cmn.Execute ,,adCmdText + adExecuteNoRecords
%>

Дополнительные сведения о формах и использовании объекта ASP Request см. в разделе Обработка сведений, введенных пользователем.

Управление подключениями к базам данных

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

Превышение времени ожидания подключения

Сервер базы данных, испытывающий внезапное возрастание активности пользователей, может оказаться перегружен, при этом существенно возрастет время, требуемое для установления подключения к базе данных. В результате, дополнительные задержки при соединении могут снизить быстродействие приложения.

Свойство ConnectionTimeout объекта Connection позволяет ограничить время, которое приложение ожидает перед завершением попытки соединения и выдачей сообщения об ошибке. Например, приведенный ниже сценарий устанавливает свойство ConnectionTimeout для ожидания в течение 20 секунд перед отменой попытки соединения:

Set cnn = Server.CreateObject("ADODB.Connection")
cnn.ConnectionTimeout = 20
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

Значение свойства ConnectionTimeout, устанавливаемое по умолчанию, равно 30 секундам.

Примечание.   До применения свойства ConnectionTimeout в приложении убедитесь в том, что источник данных и поставщик подключений поддерживают это свойство.

Группировка подключений

Группировка подключений позволяет веб-приложению использовать подключения из группы — набора свободных подключений, которые не нужно устанавливать заново. После того как подключение будет создано и помещено в группу, приложение сможет повторно использовать его, не выполняя каждый раз процесс установления подключения. Это может дать значительный выигрыш в производительности, особенно если приложение подключается по сети или часто подключается и отключается. Кроме того, помещенные в группу подключения могут использоваться несколькими различными приложениями.

Группировка сеансов OLE DB

OLE DB имеет средство группировки, называемое группировкой сеансов, оптимизированное для повышения производительности подключения при работе с большими веб-приложениями баз данных. Группировка сеанса сохраняет безопасность подключения и другие свойства. Подключение из группы используется только в том случае, если с обоих концов подключения поступают совпадающие запросы. По умолчанию поставщики OLE DB для Microsoft SQL Server и Oracle поддерживают группировку сеансов. Это означает, что вам не нужно специально настраивать свое приложение, сервер или базу данных для использования группировки сеансов. Если поставщик не поддерживает по умолчанию группировку сеансов, то для ее включения нужно будет создать параметр реестра. Дополнительные сведения о группировке сеансов см. в документации по OLE DB 2.0 Software Development Kit (SDK).

Группировка подключений ODBC

Чтобы драйвер ODBC мог использовать группировку подключений, нужно настроить драйвер используемой базы данных и задать в реестре Windows значение для его свойства CPTimeout . Свойство CPTimeout определяет длительность интервала времени, в течение которого подключение остается в группе подключений. Если время нахождения подключения в группе начинает превышать значение, указанное в свойстве CPTimeout, то подключение закрывается и удаляется из группы. По умолчанию свойство CPTimeout имеет значение 60 секунд.

Можно настроить свойство CPTimeout для группировки подключений для драйвера определенной базы данных ODBC, создав следующий параметр реестра:

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\имя_драйвера\CPTimeout = длительность
 (тип REG_SZ, значения задаются в секундах)

Например, следующий параметр задает время ожидания 180 секунд (3 минуты) для драйвера SQL Server.

\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server\CPTimeout = 180

Примечание.   По умолчанию веб-сервер включает группировку подключений для SQL Server, устанавливая свойство CPTimeout в значение 60.

Использование подключения несколькими страницами

Хотя и можно повторно использовать подключение на нескольких страницах, сохраняя подключение в ASP-объекте Application, это может привести к сохранению ненужного подключения в открытом состоянии и к потере преимуществ от использования группировки подключения. Если имеется много пользователей, которым требуется подключение к одному и тому же ASP-приложению с доступом к базам данных, лучшим подходом повторного использования строки подключения к базе данных на нескольких веб-страницах, является роазмещение этой строки в ASP-объекте Application. Например, можно задать строку подключения в файле Global.asa в связанной с событием процедуре Application_OnStart, как это сделано в следующем сценарии:

Application("ConnectionString") = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"

Затем в каждом ASP-файле, обращающемся к этой базе данных, следует написать

<OBJECT RUNAT=SERVER ID=cnn PROGID="ADODB.Connection"></OBJECT>

для создания экземпляра объекта Connection для этой страницы, а воспользоваться сценарием

cnn.Open Application("ConnectionString")

для открытия подключения. В конце страницы закройте подключение с помощью строки

cnn.Close

В случае отдельного пользователя, которому требуется повторно использовать подключение на нескольких веб-страницах, возможно, более удобным для хранения строки подключения является использование объекта Session, а не объекта Application .

Закрытие подключений

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

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

<%
  strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Inventory.mdb"
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open strConnectionString
  cnn.Close
%>

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
Аноним
Мне нравитсяМне не нравится
24 марта 2005, 18:59:29
Отличная статья. Я использовал ее в качестве примера, когда разрабатывал Html Application, который являлся пользовательским интерыейсом для работы с Excel файлом.

Excel файл выступал в качестве базы данных. За небольшими исключениями, все работало и для него также, как, скажем, для базы Access.

А именно, не работал RecordCount объекта Recordset.

P.S. Люблю статьи по делу. :)
2.
Аноним
+0 / -1
Мне нравитсяМне не нравится
23 августа 2004, 23:49:32
На данной странице приведена стандартная документация Microsoft по IIS 5.0.
Я надеюсь, что F1 и так все умеют пользоваться.
Вопрос: а что здесь новенького?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог