您的位置:寻梦网首页编程乐园ASP编程>ASP中的数据库基础知识
ASP中的数据库基础知识
作者:尹华成

在所有与Internet有关的技术领域中,数据库存储和管理是最古老,也是当前最有用的,特别是当它被赋予了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对象的变量:Setconnection=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方法可以完成从建立数据库连接,到操纵数据库和最后关闭连接的所有数据库访问动作。
    
     . Open Open方法打开Connection对象同数据源之间的物理连接,语法如下:
         connection. Open ConnectionString,UserID, Password
         connection 代表一个对象变量,用于引用已经存在的Connection对象。
         ConnectionString 可选变量,含义同前面提到的ConnectionString属性。
         UserID 可选变量,是一个包含建立连接时使用的用户名的字符串。
         Password 可选变量,是一个包含建立连接时所使用的密码的字符串。
       
     . Close 用Close方法可以关闭一个已经打开的Connection对象,但是此时该Connection对象并没有被从内存中删除,我们还可以改变它的属性参数或是打开这个对象,若要真正释放该对象占用的内存空间需要将这个对象设置为“Nothing”。如果基于此Connection对象还打开了其它的RecordSet对象,在关闭Connection对象的同时会关闭所有相关的recordSet对象。
    
     . Execute 使用Execute可以根据已经打开的Connection对象执行SQL语句或一个存储过程,并可以用一个RecordSet对象指向得出的结果集合。Execute命令的语法如下:
       connection.Execute CommandText, RecordsAffected, Options
       CommandText 字符串,包含将要执行的SQL语句、表名或存储过程。
       RecordsAffected 可选参数,一个长整型变量,操纵执行完后,其返回值为该操纵影响的记录的数量。
       Options 可选参数,描述CommandText中包含何种操纵参数,有以下可用值:
       
           常量                   值                    含义
       adCmdText                 1                    CommandText是一个用SQL语句描述的命令
       adCmdTable                2                    CommandText是一个表名
       adCmdStoredProc           4                    CommandText是一个存储过程
       adCmdUnknown              8                    CommandText是一个未知的命令类型
       
     使用Connection对象的各种方法可以完成对数据库的各种访问动作,比如添加、删除、更新和选取等操作。
       
    
     三、 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对象都有一个序号,在引用这个字段时可以用这个序号代替这个字段的字段名,这就允许我们在一个循环中使用一个整型变量来依次引用每一个字段的值,而不必写出每个字段的字段名,这样就增加了应用程序的通用性。