ASP 中的数据库访问技术

  在所有与Internet有关的技术领域中,数据库存储和管理是最古老,也是当前最有用的,特别是当它被赋予了Web的交互界面之后,对数据库的存储与管理已经上升到一个新的高度。而随着Internet的迅速发展,首先面临的困难是基于传统CGI技术的交互性页面和Web数据库访问等功能实现复杂,开发周期长,难以适应当今快节奏的企业运作环境。ASP技术就是在这样的需求中应运而生的,ASP(Active Server Pages-动态服务器主页)是一个服务器端的脚本执行环境,它通过对*.asp文件进行解释执行,能构建一个动态、交互、高效的Web服务器应用。ASP提供了一种类似于VbSctipt的可执行脚本语言,并带有许多内置对象,从而极大地简化了Web的应用开发工作,本文着重介绍ASP中的Web数据库访问技术。

  一、ADO概述

  ADO(ActiveX Data Object)是一组优化的访问数据库的专用对象集,它为ASP提供了完整的站点数据库访问解决方案。ADO对象在服务器端执行,并向客户端提供含有数据库信息的内容,客户端也可以根据指定的权限返回参数来对数据库进行读写等操作。ADO的特点就是执行速度快、使用简单、低内存消耗且占用硬盘空间小。

  因为ADO是通过ODBC来对数据库进行访问的,所以它可以连接各种支持ODBC的数据库,如Access、SQL Server、Oracle、Informix等。在使用ADO之前要先在ODBC中添加相应的数据库驱动程序,并创建相应的DSN(数据源名)。ADO中包含许多对象,其中Connection对象和Recordset对象主要用于控制数据库存取,要建立一次数据库访问首先要创建一个Connection对象,然后用基于这个Connection对象的Recordset对象来完成对数据库从操作。

  二、Connection对象

  Connection对象代表了一个打开的同OLE DB数据源的连接,它有点类似于client/server数据库应用中同Server间的真实网络连接,我们可以独立于任何其它对象建立一个Connection对象。注意,在引用一个Connection之前首先要创建这个Connection对象,其语法如下,其中connection为引用该Connection对象的变量:Set connection=Server.CreatObject("ADODB.Connetcion")

  Connection对象中包含有多个属性,下面是几个常用的属性,注意只能在创建Connection对象之后且该对象被打开前改变其属性。语法如:Connection.属性=属性值

  1. ConnectionString是一个包含连接信息的字符串,将一个“DSN名”或是一个由“argument = value”组成的字符串传递给ConnectionString属性,可以为Connection对象指定一个数据源,此属性可以在连接打开前设置,也可以在“Open”命令中设置。ADO中的argument有以下几个:

  参数描述

  Provider该Connection对象的创建者,默认值为MSDASQL

  (Microsoft ODBC Provider for OLE DB)

  Data Source指定该Connection的ODBC数据源(DSN)

  User设置打开该连接的用户名

  Password设置打开该连接时所需要的密码

  File Name由创建者指定的包含该Connection信息的文件

  (如已经注册的数据源对象)

  2. Mode

  可以设置为以下常量的参数,用来设置用户对当前连接的访问权限。

  常量值含义

  adModeUnknown 0未设置对数据库的操作权限(默认)

  adModeRead 1只读

  adModeWrite 2只写

  adModeReadWrite 3可以读写

  adModeShareDenyRead 4禁止对数据源建立其它的只读连接

  adModeShareDenyWrite 8禁止对数据源建立其它的只写连接

  adModeShareExclusive 12禁止对数据源建立其它的读/写连接

  adModeShareDenyNone 16禁止对数据源建立其它的任何连接

  3. ConnectionTimeout指定等待建立连接的时间,若超时则中断请求并给出错误信息。等待时间以秒为单位,可以将一个整数值赋给这个参数,默认值是15秒。设置ConnectionTimeout属性可以在网络拥挤或服务器忙时给出提示,防止无休止的等待。若将ConnectionTimeout的值设置为0,则系统一直等待直到连接建立成功。

  4. CommandTimeout指定当执行“Execute”命令时的等待时间,若超时则中断请求并给出错误信息。等待时间以秒为单位,可以将一个整数值赋给这个参数,默认值是30秒。

  使用Connection对象的Open、Close和Execute方法可以完成从建立数据库连接,到操纵数据库和最后关闭连接的所有数据库访问动作。

  1. Open Open方法打开Connection对象同数据源之间的物理连接,语法如下:

  connection. Open ConnectionString,UserID,Password

  connection代表一个对象变量,用于引用已经存在的Connection对象。

  ConnectionString可选变量,含义同前面提到的ConnectionString属性。

  UserID可选变量,是一个包含建立连接时使用的用户名的字符串。

  Password可选变量,是一个包含建立连接时所使用的密码的字符串。

  2. Close用Close方法可以关闭一个已经打开的Connection对象,但是此时该Connection对象并没有被从内存中删除,我们还可以改变它的属性参数或是打开这个对象,若要真正释放该对象占用的内存空间需要将这个对象设置为“Nothing”。如果基于此Connection对象还打开了其它的RecordSet对象,在关闭Connection对象的同时会关闭所有相关的recordSet对象。

  3. Execute使用Execute可以根据已经打开的Connection对象执行SQL语句或一个存储过程,并可以用一个RecordSet对象指向得出的结果集合。Execute命令的语法如下:

  connection.Execute CommandText, RecordsAffected, Options

  CommandText字符串,包含将要执行的SQL语句、表名或存储过程。

  RecordsAffected可选参数,一个长整型变量,操纵执行完后,其返回值为该操纵影响的记录的数量。

  Options可选参数,描述CommandText中包含何种操纵参数,有以下可用值:

  常量值含义

  adCmdText 1CommandText是一个用SQL语句描述的命令

  adCmdTable 2 CommandText是一个表名

  adCmdStoredProc 4 CommandText是一个存储过程

  adCmdUnknown 8 CommandText是一个未知的命令类型

  使用Connection对象的各种方法可以完成对数据库的各种访问动作,比如添加、删除、更新和选取等操作。下面给出一个例子,在这段程序中将向表tbl_test中添加一个记录,该表中共有两个字段id和name,在这个例子中我们使用的DSN为“person”。

  <%

  '创建Connection对象DataConn
  Set DataConn=server.CreateObject("ADODB.Connection")

  '设置DataConn的Mode属性值为3(可以读写)
  DataConn.Mode=3

  '通过DSN(person)建立Connection对象DataConn同数据库间的连接
  DataConn.Open "person"

  '用Execute方法执行SQL语句在表tbl_test中增加一条记录,其中id值为"1",name值为“张强”
  DataConn.Execute("Insert INTO tbl_test VALUES('1','张强'")

  '关闭Connection对象
  DataConn.Close
  Response.Write "保存完毕"
  %>


  将上面的程序保存为一个asp文件,从客户端来访问这个文件将看到“保存完毕”,打开数据库会发现表tbl_test中增加了一条id值为“1”、name值为“张强”的记录。通过Execute方法我们可以使用不同的SQL语句来实现添加、删除、更新等各种数据库操作。

  三、Recordset对象

  虽然使用Execute方法已经可以实现对数据库的各种操作,但是在编程中我们更常用的还是RecordSet对象,ADO中的内建对象RecordSets是数据库访问的主要接口,它指向数据表中的一个记录集,它有点类似于C语言中指针的概念,在任何时刻一个RecordSets对象只能指向一条记录。

  Recordset对象提供了许多方法和属性来方便对数据库的操作,下面是一些常用的Recordset方法及属性。

   * CursorType应该在Recordset对象打开之前设置这个属性,它决定了Recordset的游标类型,CursorType可以为以下值:

  常量值含义

  adOpenStatic 3静态游标,它是所访问的记录集的拷贝,看不到其它用户对数据库的修改

  AdOpenDynamic 2动态游标,可以看到其它用户对数据库的添加、删除和修改等操作,允许游标向前或向后移动

  adOpenKeyset 1关键字游标,与动态游标相同,但是只能看到其它用户对数据库的更新,看不到添加和删除结果

  adOpenForwardOnly 0向前游标,同静态游标相同,但是游标只能向前移动

   * BOF Recordset属性,在当前Recordset对象指向记录集中的第一条记录之前时BOF返回值为True(-1),反之为False(0)。

   * EOF Recordset属性,当当前Recordset对象指向记录集中的最后一条记录之后BOF返回值为True(-1),反之为False(0)。

   * RecordCount Recordset属性,RecordCount返回值为一个long型值,等于记录集中记录的数量。

   * Open在使用Recordset对象之前首先要用Open方法打开一个指向记录集合的游标,其语法如下:recordset.Open Source, ActiveConnection, CursorType, LockType, Options

  recordset Recordset对象变量

  Source可选参数,用于选取记录集,可以是SQL语句、表名或存储过程

  ActiveConnection可选参数,一个变量代表一个打开的Connection对象

  CursorType可选参数,指定游标类型,默认值为“0”

  LockType可选参数,指定编辑记录集时的锁的类型如下:

  常量值含义

  AdLockReadOnly 1只读,不可修改记录集

  AdLockPessimistic 2当编辑记录集时锁定数据库,禁止其它

  用户访问

  AdLockOptimistic 3只有使用Update方法时才锁定数据库

  AdLockBatchOptimistic 4只有使用UpdateBatch方法时才锁定数据库

  Option可选参数,同Connection的Open方法中的Option参数。

  注意:在使用Recordset对象时可以不建立Connection对象,而是在Open方法中直接传递连接参数,事实上这种情况下ADO还是创建了一个Connection对象,只是并不把它指派给对象变量。但是如果要用一个Connection对象建立多个Recordset对象,就必须建立对象并把它指派给一个Connection对象变量。

   * AddNew新建并初始化一个新记录,并将RecordSet游标指向该记录。

   * Delete删除游标指向的当前记录。

   * Update保存对当前记录集所作的任何修改。

   * MovePrevious Recordset方法,使Recordset对象指向上一条记录。

   * MoveNext Recordset方法,使Recordset对象指向下一条记录。

   * MoveFirst Recordset方法,使Recordset对象指向第一条记录。

   * MoveLast Recordset方法,使Recordset对象指向最后一条记录。

   * Close Recordset方法,关闭当前的Recordset对象以释放占用的系统资源。

   * 用Recordset变量("字段名")的形式来引用数据库中的数据。

  四、Field对象

  每个Recordset对象中都有一个由Field对象组成的Fields集合,其中每个Field对象都代表Recordset中的一个字段,在*.asp文件中可以用以下形式引用这些字段的值:

  recordset.Fields.Item(0) recordset.Fields.Item("name")

  recordset.Fields(0) recordset.Fields("name")

  recordset(0) recordset("name")

  recordset![name]

  其中recordset代表一个recordset对象,“name”为数据表中的字段名,“0”表示一个整数,一个recordset中的Field对象都有一个序号,在引用这个字段时可以用这个序号代替这个字段的字段名,这就允许我们在一个循环中使用一个整型变量来依次引用每一个字段的值,而不必写出每个字段的字段名,这样就增加了应用程序的通用性。

  五、应用实例

  在实际的Web程序设计中访问数据库一般要经过以下步骤:首先在ODBC中新建一个DSN指向要访问的数据源;创建一个Connection对象,然后建立该对象同DSN之间的连接;创建一个Recordset对象,然后打开这个对象并使游标指向一个记录集合;使用Recordset对象的各种方法来移动游标,添加、删除、修改和引用记录集中的数据,使用完毕之后关闭Connection对象和Recordset对象。

  在下面这个例子中体现了ASP访问数据库的基本操作,假设数据库表tbl_test中有两个字段id和name,表中只有一条记录id=01,name=李四,指向这个数据库的数据源为“personal”,我们要通过以下ASP程序在表中添加一条记录id=02,name=张飞,然后输出表中的所有记录。

<%@ LANGUAGE="VBSCRIPT"%>
ASP文件处理结果
<%
'创建Connection对象DataConnSet
DataConn=server.CreateObject("ADODB.Connection")

'设置DataConn的Mode属性值为3(可以读写)
DataConn.Mode =3

'通过DSN(person)建立Connection对象DataConn同数据库间的连接
DataConn.Open "personal"

'创建Recordset对象RsSet
Rs = Server.CreateObject("ADODB.Recordset")

'打开Rs,注意在这里Source是一段SQL语句,ActiveConnection是DataConn,'CursorType为静态游标, LockType为3,即只有当执行Update命令时才锁定数据库, Options值为1表明Source是SQL语句
Rs.Open "Select * From tbl_department",DataConn , 3, 3, 1

'用Execute方法执行SQL语句选取表tbl_test中的所有记录并创建RecordSet对象Rs指向这些记录

Rs.AddNew '增加一个新记录
Rs("id")="02"    'id字段值为"02"
Rs("name")="张飞"    'name字段值为“张飞”
Rs.Update    '将新添加的记录保存在数据库中

'显示所有数据
Rs.MoveFirst '使游标指向记录集中的第一条记录

Do until Rs.EOF '循环,直到游标指向记录集最后一条记录之后停止
    Response.Write Rs("id")    '显示id字段
    Response.Write Rs("name")    '显示name字段
    Rs.MoveNext    '使游标指向下一条记录
Loop
Rs.Close '关闭Recordset对象Data
Conn.Close '关闭Connection对象%>



  将上面的文件保存为*.asp文件,放在Web服务器上,然后从客户端通过浏览器访问这个文件,在浏览器中看到的执行结果如下:

  
引用内容 引用内容
01李四02张飞


  打开数据库,可以看到新记录已经保存在表tbl_test中了。
[本日志由 parno 于 2007-03-26 01:10 AM 编辑]
上一篇: JavaScript 参考教程
下一篇: Mozilla Firefox 对函数 getYear() 返回不正确的原因和解决办法
文章来自: 《家用电脑》99年第36期 黄震
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 6256