跳转到内容

活动服务器页面/使用 ADO 进行数据库访问

来自维基教科书,开放世界中的开放书籍
上一页:函数和子例程 索引 下一页:服务器端包含

本文描述了使用 ADO(ActiveX 数据对象)进行数据库连接,以及如何使用它来与数据库服务器通信和管理。您将学习如何打开到数据库的连接,运行插入更新删除选择语句,以及执行存储过程。

活动服务器页面作为一种脚本语言,是一种无状态语言。这意味着它不会在页面加载之间保留应用程序的状态。几乎所有 ASP 托管解决方案都将包含某种数据库托管。最常见的是 MySQL,其次是 Microsoft SQL Server。无论您使用什么数据库,ADO 都允许您通过活动服务器页面管理数据库。

虽然您可以在Application对象中存储持久数据是正确的。这基本上只是存储在内存缓存中,每当 IIS 或服务器重新启动时就会被清除。当尝试创建将在服务器集群中使用的应用程序时,它也会导致问题(其中每个集群都有其自己的应用程序缓存版本。)

连接到数据库

[编辑 | 编辑源代码]

以下是一个示例,展示如何打开到数据库的连接。为此,我们调用Server.CreateObject来创建内置 ADODB Connection 对象的实例。这不仅用于创建到数据库的初始连接,还将用于在稍后创建记录集命令对象

您需要将文本mysqlusermysqlpassmysqldbname替换为数据库的正确值。请注意,这是使用 ODBC 访问本地服务器(localhost)上的 MySQL 服务器。

' create a connection object
Set oConnection = Server.CreateObject("ADODB.Connection")

' open a connection to a data source
oConnection.Open "Driver={MySQL ODBC 3.51 Driver};server=localhost;port=3306;uid=mysqluser;pwd=mysqlpass;database=mysqldbname;Option=16384"

请注意,您可以将此语句用On Error块包装以捕获可能发生的任何异常。

插入、更新和删除

[编辑 | 编辑源代码]

以下将使用ADODB.Connection对象对数据库运行插入查询。无论您执行插入更新还是删除,代码都是相同的。您只需要使用修改后的查询更改sQuery变量。

' build the query to run
sQuery ="INSERT INTO Company VALUES ("Microsoft")"

' execute the insert statement
oConnection.Execute sQuery, nRecordsAffected, adCmdText + adExecuteNoRecords

Response.Write "Records Affected: " & nRecordsAffected

常量adCmdTextadExecuteNoRecordsADO 常量部分中描述。

以下代码可用于对数据库运行选择语句。您必须首先使用连接到数据库部分中描述的代码打开到数据库的连接。

sQuery = "SELECT companyid, companyname FROM tblCompany"

' create the recordset object to hold the result sets
Set rs = Server.CreateObject("ADODB.Recordset")

' set the number of records to fetch into memory at once (performance)
rs.CacheSize = 256

' execute the query and populate the recordset 
rs.Open sQuery, oConnection, adOpenKeySet, adLockReadOnly, adCmdText

'More examples of SELECT (based on criteria) are:
'*example 1.
sQuery = "SELECT companyid, companyname FROM tblCompany WHERE companyid = 1" '1. See details below
  • 1. 当上述代码段中的 sQuery 设置为示例 1 时,它将获取 companyid 值为 1 的记录,在此 SQL 语句中,WHERE 子句用于定义该条件。

常量adOpenKeySetadLockReadOnlyadCmdTextADO 常量部分中描述。现在您已经打开了记录集,您可以用它做什么?

检索记录集

[编辑 | 编辑源代码]

以下代码将向您展示如何使用选择部分中描述的记录集对象(rs)从您的数据库查询中检索值。

' EOF checks for the end of a recordset
If Not rs.EOF Then
	' The Fields collection accesses fields from a single record
	sFirstName = rs.Fields("firstname").Value
	
	' You can enumerate all fields in the record
	For Each oFld In rs.fields
		Response.Write "Field = " & oFld.Name & "<br>"
		Response.Write "Value = " & oFld.Value & "<br>"
	Next
End If
		
' You can also loop through all records
Do Until rs.EOF
	Response.Write "Name = " & rs.Fields("firstname").Value & "<br>"
	' make sure you don't forget this next step
	' MoveNext will move to the next record in the resultset
	rs.MoveNext
Loop

' following is always a good idea to clean up resources ASAP
rs.Close : rs = 0

关闭数据库连接

[编辑 | 编辑源代码]

完成对数据库的访问后,您应该始终关闭数据库连接。这不是必需的,但始终是一个好主意。

' it's a good idea to close your recordset first (if necessary)
rs.Close : rs = 0

' this will close the database connection 
oConnection.Close

ADO 常量

[编辑 | 编辑源代码]
变量 目的
'adOpenKeySet 打开一个键集
Const adOpenKeySet = 1
adLockReadOnly 创建数据库锁,以便对表进行只读访问。这是一个只向前光标,它提供检索结果的最有效方法。
Const adLockReadOnly = 1
adLockPessimistic 这种锁定方法将在对数据库进行编辑后立即锁定数据库记录。(在活动服务器页面中实际上不使用)
Const adLockPessimistic = 2
adLockOptimistic 对数据库记录使用乐观记录锁定。这意味着只有在记录被修改并且编辑提交回数据库时才会锁定记录。(在活动服务器页面中实际上不使用)
Const adLockOptimistic = 3
adCmdText 表示传递的 SQL 命令是文本(SQL 语句)
Const adCmdText = 1
adCmdTable 表示传递的 SQL 命令是要打开的数据库表的名称(所有行和字段)
Const adCmdTable = 2
adCmdStoredProc 表示传递的 SQL 命令是要执行的存储过程的名称。使用此调用时,必须单独定义参数。
Const adCmdStoredProc = 4
adCmdUnknown 表示传递的 SQL 命令未知 - ADO 库将尽其所能来解释意图的命令类型。
Const adCmdUnknown = 8
adStateOpen 表示结果集的当前状态。这表示记录集已打开,可以执行数据检索操作。
Const adStateOpen = 1
adStateClosed 表示结果集的当前状态。这表示记录集已关闭,禁止数据检索。
Const adStateClosed = 0
adExecuteNoRecords 表示不返回记录集。SQL 命令是存储过程调用、插入更新删除语句。
Const adExecuteNoRecords = 128
adParamInput 存储过程参数是输入(这是默认值),这意味着我们只是将数据传递到过程。
Const adParamInput = 1
adParamOutput 存储过程参数是输出,这意味着数据将由过程返回。
Const adParamOutput = 2
adParamInputOutput 存储过程参数既是输入又是输出。数据被传递到过程,然后在执行完成后返回。
Const adParamInputOutput = 3
adParamReturnValue 表示变量保存来自过程的返回值
Const adParamReturnValue = 4
adVarChar 可变字符(字符串)SQL 数据类型
Const adVarChar = 200
adChar 固定长度字符 SQL 数据类型
Const adChar = 129
adInteger 整数 SQL 数据类型
Const adInteger = 3
adCurrency 货币 SQL 数据类型
Const adCurrency = 6

使用 ADODB 是通过活动服务器页面连接到数据库的理想方式。ADODB 利用ODBCOLE DB技术连接到数据库,具体取决于您在使用ADODB.Connection::Open方法时使用的连接字符串。最有效的访问方法是OLE DB

您可以选择创建一个数据库库代码来简化与数据库交互的任务。您可以创建一个数据库类,它管理与数据库通信的所有任务。将此与存储在global.asa文件中的数据库配置设置相结合,您将拥有一个快速而强大的执行数据库查询的方式。

确保使用 ADO 常量来最有效地使用 ADO 方法和您的数据库服务器。上面的示例应该提供您与数据库交互所需的一切。

复习问题

[编辑 | 编辑源代码]
  • ADO 代表什么?
  • 使用哪个对象连接到数据库?
  • 使用什么方法连接到数据库?
  • 您需要哪个对象才能从选择中检索结果?
  • 如何从当前记录中检索字段的值?
  • 如何枚举记录中的所有字段
  • 如何关闭到数据库的连接
  • 编写代码以运行INSERTUPDATEDELETE查询
  • 编写代码以执行存储过程?
  • 编写代码以执行SELECT语句并读取其结果
上一页:函数和子例程 索引 下一页:服务器端包含
华夏公益教科书