日期:2008-08-10  浏览次数:21038 次

三、Error对象:
  前面讲到了Connection对象是用于与各类的数据库进行挂接的,但在此过程中将会出现一些不可预测的错误,因而有了Error这个对象。首先要清楚一个概念,Error对象是在连接数据库时产生的,而并非那些运行时的实时错误。也就是我们常用 On Error Resume Next来忽略到的错误。这些错误将在Err对象中,我们可以用一个统一的模板来集中处理,我会在后面给出一个实例。下面还是先来看Error对象的属性和方法:

  1、 Count属性:用来统计Errors集合的数目,它的特点与前面讲到的Property对象的Count对象相同。
  2、 Clear方法:写法为Error.Clear,是用来清除Errors集合中的原有对象的,在统计新的Error对象时应该先使用此语句。
  3、 Item方法:用来指定特定的一个错误,语法为Error.Item(number),其中number为一数字。由于Item为默认的方法,所以Error(number)的写法与前面的写法是等价的。下面是一段程序。用来列举Error的所有对象。
$#@60;%
"this program is testing the ADO"s Error object
Dim i
Set conn=Server.CreateObject("ADODB.Connection")
conn.ConnectionString="Driver={Microsoft Access Driver (*.mdb)};DBQ=" _
&Server.Mappath("/source_ASP")&"/property/employee.mdb;"
conn.open
if conn.errors.count$#@62;0 then
response.write "connection to database cause problem!"&"$#@60;br$#@62;"
for i =0 to conn.errors.count-1
response.write conn.errors.item(i)&"$#@60;br$#@62;"
next
else
response.write "connection to database successfully!"
end if
conn.close
%$#@62;
  对于Err对象的通用模板处理程序我将在讨论RecordSet对象时给出。
  下面我们将讨论ADO的第二个大的对象━Command对象,我的一个做网站的朋友告诉我他在平时使用ASP挂接数据库时很少使用Command对象,原因是Command对象不好使用,而喜欢用RecordSet对象。是的,可以这么说Command对象是整个ADO模型中最难掌握的一个,但也是功能和性能最好的一个。特别是它的StoredProcedue,它将处理的过程大部分都使用了在SQL Server上已经编译和优化了的存储过程,用过SQL Server的朋友都会明白的。下面就让我们来看Command对象。四、Command对象:
  从英语字面的意思就可以看出,Command是用来做命令执行和参数传递的。而Command对象的批量参数传递,StoredProcude执行等等灵活而强大的功能也是它受到青睐的原因。Command对象主要是向SQL语句、StoredProcude传递参数,依靠SQL Server的强大功能来完成数据库的操作;而RecordSet对象可以说是微软从新封装了数据对象,并提供了一系列的方法和属性来简化数据库的编程。我们看下面的一个例子,它用了两种不同的方法实现了向数据库中增加一新的记录条。从中可以清楚的看到Command对象与RecordSet对象的不同点。
方法1(Command)
const adCmdText=&H0001
const adInteger=3
const adVarChar=200
const adParamInput = &H0001
set conn=Server.CreateObject("ADODB.Connection")
set comm=Server.Createobject("ADODB.Command")
conn.open "Driver={ Microsoft Access Driver};DBQ="& _
Server.Mappath("/source_ASP")&"/property/employee.mdb;"
comm.ActiveConnection=conn
comm.CommandType=adCmdText
comm.CommandText="insert into employee (Job_ID,Fri_Name,Last_Name)"& _
&"values(?,?,?)"
set param=comm.CreateParameter("ID",adInteger,adParamInput,3,4)
comm.Parameters.Append param
set param=comm.CreateParameter("FN",adVarChar,adParamInput,255,"bill")
comm.Parameters.Append param
set param=comm.CreateParameter("LN",adVarChar,adParamInput,255,"Gates")
comm.Parameters.Append param
comm.Execute
conn.close

方法2(RecordSet)
const adCmdTable=&H0002
set conn=Server.CreateObject("ADODB.Connection")
set rs=Server.Createobject("ADODB.RecordSet")
conn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ="& _
Server.Mappath("/source_ASP")&"/property/employee.mdb;"
rs.ActiveConnection=conn
rs.open "employee",,,adCmdTable
rs.addnew
rs("Job_ID")=4
rs("Fri_Name")="bill"
rs("Last_Name")="Gates"
rs.update
rs.close
conn.close
  从上面的例子就可以看出来了,这两个对象在处理一些问题上所用的不同的方法.RecordSet对象似乎更加好理解一些,因为它加入了一些在ANSI SQL中没有的元素,它其实是用 SQL在数据库上产生一个记录集,然后用一个游标来指向这个记录集,超作该游标来遍历这个记录集。但在性能上来讲的话Command的性能也相对要优越些.其可重应用性也非常的好。而且如果你是批量的加入记录的话,你也能体会到第一种方案的好处了,因为Command对象就是将SQL产生的记录集作为整体来处理。下面详细介绍Command对象的属性、方法和集合。

   1、 CreateParameter方法:用来产生一个Parameter对象,常用的写法为Set param=comm.CreateParameter(name,type,direction,size,value),其中name为参数的引用名,在后面引用参数的值时会有用;type为指定参数的类型,例如整数为adInteger;direction指定参数是输入还是输出,相应的值为adParamInput和adParamOutput;size指定参数的最大长度或最大的值;value指定参数的值。可以将各个选项分开来写,下面的两种写法是等价的:
Set param= comm.CreateParameter(name,type,direction,size,value)

set param= comm.CreateParameter(name,type,direction,size)
param.value=value
  下面的方法其灵活性更大。大家请注意,在使用了CreateParameter方法后只是建立了新的 parameter对象,还需使用Parameter对象的append方法将该参数传递给Command对象。
  2、 Execute方法:在指