嘉人
收藏本版 |订阅 |
搜索
嘉人美妆精英学院 美人经 减肥瘦身 ASP编程菜鸟入门教程-ADO数据访问模型(二) ...
查看: 231|回复: 0
go

ASP编程菜鸟入门教程-ADO数据访问模型(二) [!copy_link!]

跳转到指定楼层
1#
发表于 2012-10-16 17:47:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  三、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方式:在指定了CommandText后,并将参数传递出去后,用Execute办法来实现履行。
  3、 ActiveConnection属性:用来指定与Connection对象的连接,这里的一个技能就是不同的Command对象指向统一个Connection衔接。
  4、 CommandText属性:其值可以是一条SQL命令句,可以是一个表名,也可以是一个StoredProcedure名。
  5、 CommandType属性:它的值由CommandText相应值的给出,分辨为adCmdText,adCmdTable,adCmdStoredProc。与前面在讲Connection对象的Execute方法中的相应的选项的含意相同。
  6、 CommandTimeOut属性:设定命令执行的超时的值。
  7、 Properties集合:我们不多讲了,与Connection对象的Property集合相差不多。
  8、 Parameters集合:也就是参数对象的聚集了,他有主要Item方法、Append方法,和Count属性,用法与Property对象及Error对象的相应属性和方法相似,下面给出一个示例:
  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 (*.mdb)};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)
  param.value=14
  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
  "The folowing statments show the value of parametrs
  dim i
  for i=0 to comm.parameters.count-1
  response.write comm.parameters.item(i)&"$#@60;br$#@62;"
  next
  当然,我们在援用参数时也可以不用数字,而用前面在CreateParameter时定义的名字,例如:FN、ID等等。另外我们可以将上面的程序的显示部分改为
  dim key
  for each key in comm.parameters
  response.write key&"$#@60;br$#@62;"
  next
  下面我想重点讲一讲StoredProcedure,它的强大足以让我们对它关注,当然这其中会波及到一些SQLServer的常识

和请登录www.58jfw.com
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 鲜花鲜花 鸡蛋鸡蛋
‹ 上一主题|下一主题

Archiver|嘉人网

GMT+8, 2025-8-15 21:59 , Processed in 0.024273 second(s), 14 queries .

Powered by Discuz! X3.2

© 2001-2010 Comsenz Inc.