4.6 ADO数据库开发组件

ADO是一种功能强大的数据访问编程模式,它把大部分数据源可编程的属性直接扩展到Active Server上。ADO用来为Visual InterDev等应用程序提供灵活的和可升级的数据库链接功能。特别对于设计基于网络的数据访问,ADO提供了一种基于对象的方法,通过ActiveX脚本与数据库的链接可轻易地实现在网络上访问数据。

ADO使用本机数据源,通过ODBC访问数据库。这些数据库可以是关系型数据库、文本型数据库、层次型数据库或者任何支持ODBC的数据库。对于其他访问模式难以完成的任务,ADO都能轻而易举地完成,有很强的数据库维护和修复能力。ADO的主要优点是易用、高速、占用内存和磁盘空间少,它是多线程的,在出现大量并发请求时,也同样可以保持服务器的运行效率,并且通过链接池(Connection Pool)技术以及对数据库链接资源的完全控制,提供与远程数据库的高效链接与访问,同时它还支持事务处理,以开发高效率、高可靠性的数据库应用程序。

4.6.1 ADO组件

在所有的ASP组件中,最有用并且最常用的组件是数据库开发组件。使用ADO对象可以建立和管理数据库的链接,按数据库服务器的要求获得数据,执行更新、删除、添加数据,获取ODBC的错误信息等。它是数据库发布的关键技术。

1.ADO组件的主要对象及其功能

ADO组件有7个子组件,其中3个组件Connection组件、RecordSet组件、Command组件需要使用Server对象的CreateObject方法将其实例化为对象才能使用;其他4个是Parameter对象、Porperty对象、Error对象、Field对象。在上面7个子组件中,前3个组件在数据库链接与操作方面尤其重要。利用ADO访问数据库的ASP脚本程序通常使用Connection对象建立并管理与远程数据库的链接;使用Command对象提供灵活的查询;使用RecordSet对象访问数据库查询所返回的结果。这三者是ADO中最基本也最核心的对象。

ADO组件7种对象的功能描述如下。

(1)Connection对象:提供对数据库的链接服务。

(2)Command对象:定义对数据源操作的命令。

(3)RecordSet对象:由数据库服务器所返回的记录集。

(4)Parameter对象:表示Command对象的参数。

(5)Property对象:单独的一个Property对象,提供属性功能。

(6)Error对象:提供处理错误的功能。

(7)Field对象:由数据库服务器所返回的单一数据字段。

2.使用ODBC链接技术

ODBC是Microsoft公司开发的数据库链接企业标准。ODBC技术的推出解决了早期数据库应用程序可移植性差的问题,逐渐成为行业事实上的链接数据库的通用接口的国际标准。它由ODBC API和ODBC驱动程序两个部分组成。

(1)ODBC API。ODBC API由Windows DLL构成,Windows DLL包括一系列的函数可以对所有适合ODBC驱动程序的数据库类型提供数据库服务。ODBC API定义了数据库存取的方法,并对应用程序提供了一致性的接口界面,可以让程序设计者用同一方法对不同类型的数据库进行操作。

(2)ODBC驱动程序。应用程序要链接不同类型的数据库,都需要一个ODBC驱动程序。由ODBC驱动管理程序为数据源打开ODBC驱动程序并将SQL语句传送给驱动程序,同时ODBC驱动程序负责将处理结果返回给应用程序。因此必须为每类数据库提供专用的ODBC驱动程序。有了ODBC API和专用的ODBC驱动程序,想变更数据库时,只要挂上相应数据库的ODBC驱动程序就行了,而不必更改源程序。

由于ODBC API的支持,各种类型数据库的存取关键在于是否有相应的ODBC驱动程序,所以凡是能够提供ODBC专用驱动程序的数据库均可成为可访问的Web数据库对象。ODBC就像数据库中的通用语言,对大量的数据库管理系统都有通用的语法接口可以与任何具有相应驱动程序的数据源相链接。因此,通过利用ODBC,就能够把来自如Access、FoxPro、Foxbase、SQL Server以及Oracle等其他关系数据库数据源的数据综合在一起。

3.创建一个系统DSN

DSN(Data Source Name)即数据源名。ASP通过ODBC API访问指定的数据库,相应数据库首先要建立数据源,也就是需要设置DSN。设置DSN的方法有很多,如果用户正在使用Visual InterDev来开发Web应用程序,可以使用它来创建一个系统的DSN。但是最常见的方法是在Windows NT/XP的控制面板中进行设置。设置过程如图4.6.1~图4.6.5所示。

图4.6.1 ODBC数据源管理器

图4.6.2 选择数据库驱动

图4.6.3 创建新数据源

图4.6.4 选择数据库文件

图4.6.5 完成添加数据源

4.6.2 用Connection对象链接数据库

1.创建Connection对象

Connection组件使用Server.CreateObject方法创建.Connection对象。

代码如下:

2.Connection对象方法

Connection对象主要的方法有以下几种。Open方法:用于建立到数据源的物理链接;Close方法:用于关闭一个链接,在对Connection对象操作结束时,使用Close方法释放所有与之关联的系统资源;Execute方法:用于执行指定的查询、SQL语句、存储过程或特定的文本;Cancel方法:用于取消用异步方式执行的Execute或Open方法的调用;BeginTrans、CommitTrans和RollbackTrans方法:用于适应Internet电子商务应用而提供的事务(或交易)处理方法。

(1)Open方法。

链接对象只有与指定数据源产生关联才能被用来访问对应数据源,产生关联的方法就是打开一个Connection对象。语法格式如下:

该方法用于打开一个数据库并建立链接。其中ConnectionString是由分号分隔的一系列的链接数据库信息字符串,包括数据源、客户端数据源等;可选项UserID用来链接数据源的用户名由数据库管理员提供;Password是具有用户认证的数据源中需要用到的密码;Options指定打开链接的方式是异步还是同步。

当选用不同的ConnectionString参数时,可以形成两种打开数据库的方式。

①DSN方法打开数据库。

DSN方法打开数据库指用“数据源”方式链接数据库。数据源名由用户自己定义,通过ODBC链接数据库先建立对应数据库的数据源(DSN)。假如在wwwroot文件夹下有db.mdb数据库,现在用“控制面板”上的ODBC将db的DSN名设为hqqq后,那么ConnectionString就变为DNS=hqqq。这样用户就可以用以下代码创建MyConn对象,同时打开一个与数据源名为hqqq相对应的数据库。

②全路径DSN方法打开数据库。

全路径DSN方法不用在链接数据库前先建立ODBC数据源,可以采用直接指定ODBC驱动程序名称的方法来建立与数据库的链接。链接数据库字符串ConnectionString必须使用"Diver={ODBC驱动程序名};dbq="&Server.MapPath("数据库名")的形式。ODBC驱动程序名根据选择打开的数据库类型而定。

如下代码打开了一个Microsoft Access的db.mdb数据库。

其中:Drive={Microsoft Access Driver(*.MDB){,表示要通过Access的ODBC驱动程序来存取数据库。当数据库是SQL Server类型时则驱动程序是“drive={SQL Server{”,如果是Oracle类型,则驱动程序是“drive={Microsoft ODBC for Oracle{”。

(2)Close方法。

语法格式:Connection对象名.Close

该方法用于关闭一个已经创建的Connection对象及其相关对象。如下两种语句代码均可关闭MyConn对象:

或:

(3)Execute方法。

语法格式Ⅰ:Connection对象名Execute(SQL指令)

语法格式 Ⅱ:Connection对象名.Execute(数据表名)

该方法用于执行指定的SQL指令或一个存储过程。如下两段语句代码可以分别打开数据表UserTable,并建立MYRS对象:

(4)BeginTrans、CommitTrans和RollbackTrans方法。

微软的BeginTrans、CommitTrans和RollbackTrans方法是为适应Internet网上电子商务应用而提供的事务(或交易)处理方法。一个事务通常由一组语句构成,当一个语句没有执行成功,则应该所有语句都不成功。这三个方法可以用于控制多表的同步操作。

①BeginTrans方法:用于开始一个新的事务(交易),同时返回一个长整型的数据类型;

语法格式:Connection对象名.BeginTrans

②CommitTrans方法:用于存储在当前事务中的任何变更并结束当前的事务;

语法格式:Connection对象名.CommitTrans

③RollbackTrans方法:用于取消在当前事务中的任何变更并结束当前的事务。

语法格式:Connection对象名.RollbackTrans

3.Connection对象属性

运用ADO访问数据库需要通过一个打开的数据库链接来进行,这个链接就是ADO的链接对象Connection。Connection对象建立了与要访问数据源的关联关系,Connection对象具有一组属性和方法用于表示、维护这个关联关系,并可执行SQL语句。

Connection有很多引用十分方便的内部属性。以下给出部分常用的属性。

●Attributes:设置Connection对象运行事务的控制方法;

●CommandTimeout:设置Execute方法的执行截止时间;

●ConnectionString:设置Connection对象链接数据源的信息;

●ConnectionTimeout:设置Connection对象的Open方法与数据库链接等的最长等待时间,默认值为15秒;

●CursorLocation:控制光标的类型;

●DefaultDatabase:设置Connection对象的默认数据库名称;

●IsolationLevel:用于设置Connection对象运行事务的时机;

●Mode:控制链接对象所共享数据库的模式。只能在关闭Connection对象时设置,用于设置对数据的可用权限,其属性值是系统定义的一些常量;

●Provider:用于设置Connection对象内定数据库管理程序名称;

●Sate:指明Connection对象正处于的状态,这些状态有关闭、打开、正在链接、正在执行命令等;

●Version:标示ADO对象的版本。

4.6.3 用Command对象执行数据库操作

Command的组件对象负责传递SQL指令。利用Command对象,可以表示一个命令字符串、存储过程或一个表名。通过与已经创建的Connection对象配合使用,发出SQL指令,从而实现对数据库的请求操作。Connection对象和Command对象都能创建安全的游标。Command对象表示一个可被数据源处理的命令,对于某些只是向页面报告数据的过程来说,这是很理想的。

Command组件可以利用已经创建的Connection对象来创建Command对象,也可以单独创建。

1.创建Command对象

建立Command对象的方法如下。

语法格式:Set Command对象名=Server.CreateObject("ADODB.Command")

如下代码建立了一个名为MyComm的Command对象:

2.Command对象属性

Command对象的属性控制着对数据源进行操作的一切特性。

(1)ActiveConnection属性。

该属性定义了Command对象的链接信息。这个属性设置或者返回一个字符串,或者指向一个当前打开的Connection对象,或者定义一个新的链接。

(2)CommandText属性。

该属性为SQL语句、存储过程或者是一个表名。该属性的内容一般是存储过程或是SQL语句,但也可以是数据提供者所支持的任何特殊有效的命令格式。下面一个简单的例子说明如何利用CommandText属性。

说明:当Command对象的CommandText属性为SQL或者是一个存储过程时,数据提供者会自动地将参数加到Command对象的Parameters集合中。

(3)CommandTimeout属性。

如同Connection对象的CommandTimeout一样,该属性也是定义Command对象终止并产生一个错误之前等待的时间。它可以继承和重载Connection对象的这个属性,如果不另外设置,则会继承与之链接的Connection的这个属性值,如果自行设置后,Connection对象的CommandTimeout属性值不再对它起作用。

(4)CommandType属性。

该属性用来优化数据提供者的执行速度。通过定义CommandText属性中的命令类型,数据提供者就不用花时间去分析是什么类型的数据。就如同Connection对象的Exe-cute方法中的Option参数一样,它的取值如下。

①adCmdText:表示处理的是一个SQL语句。

②adCmdTable:表示处理的是一个表。

③adCmdStoreProc:表示要处理的是一个存储过程。

④adCmdUnknow:表示不能识别,它是默认值。

(5)Name属性。

该属性表示Command对象的具体名称,赋值方式如:String=Command.Name。

(6)Prepared属性。

该属性表示在命令被执行前是否要用命令创建一个预编译语句。尽管这样做在执行SQL语句开始速度会比较慢,但如果是那些经常要进行的查询,则将此属性设为true可以极大地提高速度。其原因是当数据提供者收到一个命令,而该属性为true,则CommandString就会被编译、优化和存储。当下一次再次使用这个命令时,就会执行编译和优化过的例程,而不是一个原始的SQL语句。

(7)State属性。

该属性用来设置Command对象的状态,有两个取值,如下所示。

①AdStateClosed(=0):表示Command对象处于关闭状态。

②AdStateOpen(=1):表示Command对象处于打开状态。

赋值方式:Command对象.State=StateValue。

3.Command对象方法

Command对象方法的作用是创建执行命令过程中所用到的所有对象。

(1)CreateParameter方法。

该方法是用来创建一个新的Parameter对象,并在执行之前加到Command对象的Parameter集合中。Parameter对象表示传递给SQL语句或存储进程的一个参数。实际上,使用Parameter对象只是一种向SQL语句或存储进程传递一个参数的方法。

CreateParameter方法的语法格式如下:

其中“参数类型”是对数据库而言的,有如下四个可取值。

①AdParamUnkown(=0):表示该参数的类型无法确定。

②AdParamInput(=1):表示该参数是一个输入参数。

③AdParamOutput(=2):表示该参数是一个输出参数。

④AdParamReturnValue(=3):表示该参数是一个返回值参数。

(2)Execute方法。

该方法用于执行指定的SQL指令或是存储过程。功能与前面的Connection对象的Execute方法类似。其语法如下:

语法格式Ⅰ:

用Command.Execute方法建立一个记录集对象,以便对查询结果做进一步的处理。

语法格式 Ⅱ:

用于只对数据库进行操作。

如果不需要对查询结果进行处理,则可用格式 Ⅱ,参数意义如下。

①RecordsAffected:表示每次对数据库进行访问后所返回或影响的记录条数。

②Parameters:表示所要传递的所有参数。

③Options:表示对数据库操作的类型,有4个取值:-1,1,2,3。

4.6.4 用RecordSet对象访问数据库

数据库通常由一个或多个表组成,要存取指定数据库中的某个数据表,必须在用前面的MyConn.Open方法打开并链接了相应的数据库后,再建立RecordSet对象,才能对其数据表进行各种操作。

1.创建RecordSet对象

建立RecordSet对象,可以有两种方法:

(1)使用Server.CreateObject("ADODB.RecordSet")创建RecordSet对象。然后通过打开RecordSet对象创建一个与指定数据库表关联的RecordSet对象实例。格式如下:

(2)可以采用Connection和Command对象的Execute()方法,当用Execute()方法从一个数据库返回查询结果时,一个RecordSet对象会被自动创建。格式如下:

如下代码表示打开了db.mdb数据库,并建立了库中数据表UserTable的RecordSet对象MyRS:

2.RecordSet对象方法

建立了RecordSet对象之后,要用RecordSet对象的方法来实现对数据库中指定数据表进行相应的操作。RecordSet对象的方法很多,以下分别介绍。

(1)Open方法。

Open方法有两种:

①RecordSet对象名。Open SQL指令,connection对象,RecordSet类型,锁定类型;

②RecordSet对象名。Open数据表名,connection对象,RecordSet类型,锁定类型。

Open方法用于执行用户向数据库提出的请求,请求可以是执行一个SQL指令也可以打开一个指定的数据表。其中connection对象是当前正在操作的connection对象;而“RecordSet类型”和“锁定类型”则是用于描述打开方式的。两者的具体取值如表4.6.1和表4.6.2所示。

表4.6.1 RecordSet类型设置

表4.6.2 锁定类型设置

以下代码段是进行数据库链接操作的关键语句。

<%1:Set MyConn=Server.CreateObject("ADODB.Connection")2:MyConn.Open"hqqq"3:Set MyRS=Server.Createobject("ADODB.RecordSet")4:SQL="select*from UserTable"5:MyRS.Open SQL, MyConn,2,4%>

(2)Close方法。

关闭或者释放RecordSet对象的方法有如下两种:

(3)指针移动方法。

RecordSet对象的指针移动方法有5种,它分别是:

①MoveFirst:该方法将指针移动到RecordSet对象的第一条记录;

②MoveLast:该方法将指针移动到RecordSet对象的最后一条记录;

③MoveNext:该方法将指针移动到RecordSet对象的当前记录的下一条记录;

④MovePrevious:该方法将指针移动到RecordSet对象的当前记录的上一条记录;

⑤Move NumRecord Start:将指针移动到NumRecord和Start参数指定记录处。

其引用方法如下:

RecordSet对象名.指定移动方法名

如MyRS.MoveLast表示将UserTable中的指针移动到最后一条记录上。

(4)记录操作方法。

RecordSet对象的记录操作方法有以下几种:

①Addnew:该方法可以向RecordSet对象中添加一条记录;

②Delete:该方法用于删除RecordSet对象中的一条记录;

③Update:该方法用于更新RecordSet对象中的当前记录;

④CancelUpdate:该方法用于取消对数据的更新操作,但该方法应在Update方法之前使用才有效;

⑤UpdateBatch:该方法是在表4.6.2中的AdLockBatchOptimistic(=1)时,该方法用于保存对一个或多个记录的修改。

其引用方法如下:

其中“更新条件”有3个取值:

①AdAffectCurrent(=1):表示对当前指针所指的记录进行更新;

②AdAffectGroup(=2):表示对符合Filter属性的记录进行更新;

③AdAffectAll(=3):表示对所有记录进行更新。

3.RecordSet对象属性

RecordSet对象属性很多,下面分别介绍。

(1)CursorLocation属性。

该属性用来设置记录指针的当前位置,有如下3个可取值:

①AdUseServer(=2):表示对数据库的查询结果的操作将在服务器端进行;

②AdUseClient(=3):表示对数据库的查询结果将返回到客户端以供处理;

③AdUseClientBatch(=4):表示动态地返回数据库的查询结果,并断开链接,如有新的查询请求,再重新建立链接。

(2)CursorType属性。

①AdOpenForWardOnly(=0):使用前向游标,只能在记录集中向前移动;

②AdOpenKeySet(=1):使用KeySet游标,可以在记录集中向前或向后移动。如果另一个用户删除或改变了一条记录,记录集中将反映这个变化。但如果另一用户添加了一条记录,新记录不会出现在记录集中;

③AdOpenDynamic(=2):使用动态游标,可以在记录集中向前或向后移动。其他用户造成的记录任何变化都将在记录集中有所反映;

④AdOpenStatic(=3):使用静态游标,可以在记录集中向前或向后移动。但是静态游标不会对其他用户造成的记录变化有所反映。

(3)Locktype属性。

该属性用于设置光标的类型,不同的光标类型会对RecordSet对象产生不同的影响,有如下4个可取值:

①AdLockReadOnly(=1):是默认属性,表示RecordSet对象以只读方式打开,该参数无法使用AddNew、Update、Delete等方法;

②AdLockPessimistic(=2):指定在编辑一个记录时,立即锁定它;

③AdLockOptimistic(=3):指定只有调用记录集的Update方法时,才锁定记录;

④AdLockBatchOptimistic(=4):指定记录只能成批地更新。

(4)Filter属性。

该属性用于设置RecordSet对象的数据显示方式,有如下4个可取的值。

①AdFilterNone(=0):表示显示所有的数据;

②AdFilterPendingRecords(=1):表示只显示没有经过修改、添加或删除的数据;

③AdFilterAffectedRecords(=2):表示只显示最近更新过的数据;

④AdFilterFetchedRecords(=3):表示只显示存于服务器端缓存的数据。

(5)EditMode属性。

该属性用于显示当前记录所处的状态,有如下3个可取的值。

①AdEditNone(=0):表示当前记录尚未被修改;

②AdEditInProgress(=l):表示当前记录正在处理中;

③AdEditAdd(=2):表示当前记录是通过AddNew方法添加的,并且该记录的数据未被存入数据库中。

(6)State属性。

该属性用于设置的状态,有如下两个可取的值:

①AdStateClosed(=0):表示RecordSet对象处于关闭状态;

②AdStateOpen(=1):表示RecordSet对象处于链接状态。

(7)ActiveConnection属性。

该属性用于链接Connection对象,其值可以是Connection对象名或包含“数据库链接信息”的字符串。

(8)Source属性。

该属性用于链接Command对象,其取值可以是一个Command对象名,一段SQL指令,一个数据表名或一个内置过程名。

(9)RecordCount属性。

通过该属性可以取得当前RecordSet对象中的记录条件。

(10)BOF属性。

通过该属性可以判断指针是否已在数据表的开始处。

(11)EOF属性。

通过该属性可以判断指针是否已在数据表的结束处。

(12)BookMark属性。

该属性可以提供记录或指向数据指针当前位置的功能。

(13)MaxRecords属性。

通过该属性可以设置每次从数据库中取得数据记录的最大条数。

(14)CacheSize属性。

通过该属性可以设置客户端每次可以从服务器端数据库中取得的数据量的大小。

4.RecordSet对象的应用

(1)取RecordSet对象数据。

与数据库的关系表一样,记录集对象的数据结构由记录行(Row)和字段(Field或Column)构成,任何时候对记录集数据的访问只是访问其当前的记录。一个记录是若干字段(域)的集合,故读取记录数据即为对字段的访问。就RecordSet对象来说,字段名和字段的顺序号均可识别一个字段,例如sales表的第一个字段的字段名为ID,第二个字段的字段名为GoodsName,其字段的顺序号则为0和1。对字段的访问既可以通过字段名也可以通过字段的顺序号。如要访问RecordSet对象RS的字段ID,可用以下几种表达式:RS("ID");RS(0);RS.Fields("ID");RS.Fields(0);RS.Fields.Item("ID");RS.Fields.Item(0)。当要读取记录集的所有字段时,用字段的顺序号来访问比较简单。

采用ASP脚本在Web页面上显示表sales的所有记录数据,读取字段值时采用字段顺序号,如下例所示。

(2)记录集记录间的移动方法和记录集游标。

可以使用RecordSet对象的一组移动方法进行当前记录的重定位,以达到遍历记录集的目的。记录集的移动方法不能任意使用。记录集游标的性质决定可以对记录集进行何种移动,还决定了其他用户对一条记录集能进行怎样的改变。

在Web页中列出数据库表sales的GoodsName域,要求显示顺序从最后一条记录开始直至第一条记录,如下例所示。

(3)记录集记录的修改和记录锁定。

除了可以用SQL更新数据库表的记录外,还可以使用RecordSet对象的一组记录增、删、改的方法修改记录集记录。

在数据库表sales中插入一条新记录,如下例所示。

(4)记录集记录的分页处理。

在一页中列出成千上万条信息显然不现实。一种可能的做法是每次从数据库中读出一定数目的记录在一页中显示,用户通过单击上下翻页来访问数据库。另一种做法是将所有记录一次从数据库读出放在记录集中,然后利用RecordSet对象的属性实现分页控制。后者适合在数据库中记录数据不是很多时使用;如果每个用户访问时一次读取很多记录则采用第一种方法。由于RecordSet对象具有许多属性,所以采用第二种方法进行分页控制十分方便。与分页相关的属性有以下几个。

①PageSize:指定一页记录数,是分页的关键;

②AbsolutePage:表示当前记录所在页的页号;

③AbsolutePosition:表示当前记录相对于第一条记录的位置,当前记录是第一条记录时,其值为1;

④PageCount:RecordSet对象总的页数;

⑤RecordCount:RecordSet对象总的记录数。

利用这些属性和Move方法,可以在ASP脚本中很方便地实现分页控制。通常步骤是:

①通过设置RecordSet的PageSize属性指定页面大小;

②将数据库中的数据一次读入RecordSet中;

③根据RecordSet的PageCount属性在显示页面上显示总页数和页面链接项;

④设置AbsolutePage属性。

4.6.5 Parameter对象

1.Parameter对象

Parameter对象表示一个基于带参数的查询或存储进程的Command对象相关的参数。Parameter对象的属性是从传递给Command对象CreateParameter方法的参数那里继承而来的。但是有些属性是不能继承的,可在对象创建后设置,然后加入Parameters中。

(1)Parameter对象的属性。

①Attributes属性:该属性用来返回或设置它所能接受的任何特殊类型的数据。

②Direction属性:该属性从Command对象的CreateParameter方法继承而来,用来表示Parameter对象传递命令的一个参数或者由存储进程返回的值。

③Name属性:Parameter对象的Name属性用来定义它的名称。它是一个字符串的值,用来表示Parameters集合中的Parameter对象。如果没有把它加入Parameters集合,它的Name属性是可读/写的。

④Precision属性:该属性用来设置或返回数值的位数。

⑤Size属性:同Command对象的CreateParameter方法的Size参数一样,该属性定义了Parameter对象的最大范围。即使把该Parameter对象加入Parameters集合后,它仍然是可读/写的。

⑥Type属性:该属性一般是从Command对象那里继承而来,记录了某参数对象的字段数据类型。

⑦Value属性:该属性定义了要传递给Command对象绑定的查询或存储进程的值。记录了某参数对象的字段初始值。

(2)Parameter对象的方法。

Parameter对象只有一个方法,即AppendChunk方法,用来处理传递给一个参数的长文本或二进制数据。

AppendChunk方法允许把一个长文本或二进制信息加入到Parameter对象,它的使用语法是:

其中Data参数是一个要加入到Parameter对象的长文本或二进制数据。但是在使用该方法前,Parameter对象的Attributes必须设置为adFLDLong,这样Parameter对象能够接受该方法加入的长文本或二进制数据。在内存不太多的时候,AppendChunk方法可以用来处理部分长数据。当多次调用该方法时,新数据就可以不断被加入到现存的参数中。

2.Parameters集合

Parameters集合主要用于存储过程传递参数。

(1)Parameters集合的属性。

①Count属性:该属性返回某个Command对象的参数个数。

②Item属性:该属性返回集合中的某一个参数。它有一个索引值,它可以是所有参数在Parameters集合中的参数值,也可以是参数的名字。

(2)Parameters集合的方法。

①Append方法:当调用CreateParameter方法后,就可以调用Parameters集合的Ap-pend方法增加一个参数。Parameters集合的Append方法的唯一参数就是一个Parameter对象名。

②Delete方法:该方法把Parameters集合中的Parameter对象删除。它的参数就是要删除的Parameter对象名。

③Refresh方法:一旦一个Command对象通过CommandText属性与某个存储进程绑定后,就可以利用Refresh方法来从存有Parmeters集合的数据提供者那里查询信息。

4.6.6 Property对象

1.Property对象

在ADO中,将每个对象的每个属性都作为一个对象来看待,并用Property对象来保存。ADO对象通常提供多个属性,而每一个属性都是一个独立的Property对象,拥有自己的名称、值、数据类型与属性,为了方便ADO管理与控制,ADO把这些具有相同父对象的属性集合于Properties数据集合中。Property对象是作为一个对象的辅助信息,它可以是一个对象目前处理的状态,也可以是辅助其他方法或对象的数据,它表示由数据提供源定义ADO对象的动态特性。Property对象属性如下:

(1)Attributes属性:控制Property对象行为,记录了Property对象属性的特性,其返回一个整数值;

(2)Name属性:记录了Property对象名称;

(3)Type属性:记录了Property对象数据类型,即记录了ADO的所有数据类型;

(4)Value属性:记录了Property对象属性的值。

2.Properties集合

Properties数据集合内置于Connection、RecordSet、Command、Field对象中,要获取Properties数据集合,引用格式如下:

下面分别介绍Properties数据集合的属性与方法。

Count属性:记录了Properties数据集合中Property对象的数目;

Refresh方法:该方法强制重新读取某属性数据;

Item方法:该方法可以取得Properties数据集合中所包含的任何一个Property对象。

4.6.7 Error对象

在ADO中,所有的错误信息都由Connection对象的Errors数据集合来管理。网络传输的中断、数据控制器的不支持等很多原因可能会造成ADO应用程序上执行的错误,这些错误的信息则记录在Error对象。Connection对象通过Errors数据集合取得这些错误的信息细节。

Errors数据集合属于Connection子对象,因此在ADO程序中如果直接使用Connec-tion对象取得对数据库服务器的链接,那么可以按照下面的方法取得Errors的数据集合:

如果要判断执行程序中是否有错误发生,那么可以检查Errors数据集合中的Count属性(Count属性记录Errors数据集合内的Error对象个数),若Count属性值为0则表示执行程序未发生任何错误,若返回大于等于1的数值则表示执行当中有某部分发生了错误。

1.Error对象

Error对象负责存储一个系统在运行时发生的错误或警告。Error对象的属性如下。

(1)Description:返回与该错误相关的错误信息;

(2)HelpComtext:记录特定错误的帮助信息的ID值;

(3)HelpFile:记录描述错误帮助文件的所在路径;

(4)Number:记录发生错误的代码号;

(5)SQLState:返回一个在数据提供者处理SQL语句时返回的5个字母字符串的错误代码,代表一个给定的Error对象的SQL状态;

(6)Source:返回一个用来代表产生错误对象的字符串。

2.Errors集合

(1)Errors集合的方法。

Errors集合拥有两个内部方法。

①Clear方法:用来清除Errors集合中的所有Error对象,语法为:

②Item方法:用来返回某个特定的Error对象,语法为:

其中index为欲返回的Error对象名称或整数索引值。

(2)Errors集合的属性。

Errors集合有一个Count属性,该属性用来返回Errors集合中错误对象的个数。

4.6.8 Field对象

RecordSet对象除包含Properties集合外,还包含一个Fields集合,该集合由Field对象组成。每个Field对象代表了一个RecordSet对象的数据列。

(1)Field对象的方法。

Fields对象有一个重要的方法:Item方法,它用于返回集合的成员。

Item方法的语法为:

其中,object为一个对象引用,collection为集合名(此处为Fields,另外还可以是Prop-erties以及Errors, Parameters),Index为索引号或者列名。

此外,由于Item方法为Fields集合的默认方法,因此可以不包含关键字Item,即下面两句代码相同:

(2)Field对象属性。

Field对象有一个属性:Count属性,用于表示集合中对象的个数。

例如:

表示RecordSet对象的数据列的列数。

4.6.9 用ADO发布Web数据库实例

1.创建和配置ODBC数据源

ODBC技术的支持,使得凡是能提供ODBC专用驱动程序的数据库均可成为Web数据库进行访问与通信。ASP通过ODBC API访问相应的数据库,首先被访问的数据库要能生成数据源,也就是要先建立数据源。如果在IIS/PWS的运行环境下建立数据源,可以通过将指定使用的数据库在“控制面板”的ODBC数据管理器中进行注册来实现。实际操作就是确定该数据库的“系统DSN”名称,当然用户系统中必须有相应数据库的ODBC驱动程序,用户系统中有哪些驱动程序可以从ODBC数据管理器的“驱动程序”标签中查看到,如图4.6.2所示。我们可以很容易地获得许多数据库提供的ODBC驱动程序,如,Access、SQL Sever、Oracle、dBASE、Visual Foxpro等的ODBC驱动程序。数据源的建立与配置具体操作可参见创建DNS数据源部分。

2.Web数据库发布关键步骤

用户可以根据自己网站建设开发的实际选择合适的数据库系统进行安装,并建立相应的数据库。合理地规划其中的各类数据表以及定义好各数据表的结构,然后将其存放在IIS/PWS服务器的根目录或其子目下。

除了建立了ASP的运行环境之外,通过ODBC发布数据库的关键有如下5个步骤。

(1)启动“控制面板”上的ODBC数据源系统。在“ODBC数据源管理器”对话框中选择“系统DSN”标签,单击“添加”按钮即可按提示创建新的数据源,即注册了数据源名。

(2)建立Connection对象,打开数据库。

用Server对象的CreateObject方法建立ADO中的Connection组件对象,方法如下:

用Connection对象的Open方法打开数据库,可选择下列方法之一。

①用全路径DSN方法打开数据库(用全路径DSN方法打开数据库,可省去前面“创建数据源”步骤)。

②用DSN方法打开数据库。

(3)建立RecordSet对象,打开数据表。

该步骤有如下4种方法可选用:

(4)对数据库进行各种操作。

使用SQL查询语言,ASP的内置对象和组件对数据库各类数据表进行数据增、删、改、查等各种数据库操作,实现Web数据库的发布功能。

(5)关闭数据库。

完成数据库操作后关闭数据库,方法如下:

3.企业人事档案管理实例

以下虚拟一个公司的企业职员人事档案管理系统作为背景进行Web数据库信息发布。

(1)建立数据库与创建数据源。

用MicrosoftAccess数据库系统建立数据库,并存放在IIS服务器的\Inetpub\wwwroot目录下。企业职员人事档案管理数据库名为company_rsgl,其中有两个表,职员信息表表名为Worker-Info,管理员权限表表名为UserID。表结构如下:

①Worker-Info表结构。

●ID(序号),长整型,自动编号;

●No(编号),字符型(4),不为空,不重复;

●Name(姓名),字符型(8);

●Sex(性别),字符型(2);

●Age(年龄),整型;

●Duty(职位),字符型(10);

●Unit(工作单位),字符型(10);

●Work(参加工作时间),日期/时间型;

●Salary(工资),货币型;

●Phone(电话号码),整型;

●Address(通讯地址),字符型(50)。

②UserID表结构。

●ID(序号),长整型,自动增加;

●UserName(管理员名),字符型(8),不为空;

●UserPW(管理员密码),字符型(6),不为空;

●UserClass(管理员等级),字符型(2),不为空。

(2)编制相关人事管理程序,对数据库进行库链接、建立记录集和各种数据库操作。

本实例有7个程序,如表4.6.3所示。

表4.6.3 人事管理相关程序

以下给出关键程序的代码。

【例4.6.1】企业人事档案管理主页面。

4-6-1. html程序代码如下:

程序执行结果如图4.6.6所示。

图4.6.6 企业人事档案管理主页

【例4.6.2a】职员资料查询方式选择页面。

程序执行结果如图4.6.7所示。

图4.6.7 职员资料查询选择页面

【例4.6.2b】按职员姓名查询页面。

程序代码如下:

程序执行结果如图4.6.8所示。

图4.6.8 按姓名查询页面

【例4.6.3】查询处理程序与结果显示。

4-6-3. asp程序代码如下:

程序执行结果如图4.6.9所示。

图4.6.9 按姓名查询结果

【例4.6.4】ASP包含文件(公用信息“返回”按钮程序代码)。

Include 4-6-0. asp程序代码如下: