61
asp ADO 的的的的的

asp

  • Upload
    eitan

  • View
    38

  • Download
    0

Embed Size (px)

DESCRIPTION

asp. ADO 的内部对象. ADO?. ADO 的内部对象. Connection 对象,连接对象,主要用来建立与数据库的连接。 Command 对象,命令对象,是对数据库执行命令的对象,它可以执行对数据库查询、添加、删除、修改等记录操作。 Recordset 对象,记录集对象,用来得到从数据库返回的记录集 。 Error 、 Parameter 、 ield 分别是它们的子对象. Connection 对象. 通常我们打电话要经过拨号连接、会话、会话结束后挂断等操作步骤,对 Web 数据库的操作也是如此,即建立与数据库的连接、操作数据库和关闭与数据库的连接。 - PowerPoint PPT Presentation

Citation preview

Page 1: asp

asp

ADO的内部对象

Page 2: asp

ADO?

Page 3: asp

ADO 的内部对象• Connection 对象,连接对象,主要用来建

立与数据库的连接。• Command 对象,命令对象,是对数据库执

行命令的对象,它可以执行对数据库查询、添加、删除、修改等记录操作。

• Recordset 对象,记录集对象,用来得到从数据库返回的记录集 。

• Error 、 Parameter 、 ield 分别是它们的子对象

Page 4: asp
Page 5: asp

Connection 对象• 通常我们打电话要经过拨号连接、会话、

会话结束后挂断等操作步骤,对 Web 数据库的操作也是如此,即建立与数据库的连接、操作数据库和关闭与数据库的连接。

• Connection 对象就是用于建立并管理与数据库的连接。连接建立后,才可以利用 Connection 对象的一些方法、 Command 命令对象和 Recordset 记录集对象对数据库进行操作。

Page 6: asp

Connection 对象• 利用 ASP 中的 Server 对象的 CreateObjec

t 方法建立连接对象。• 建立 Connection 对象的方法如下:Set Connection 对象实例 =Server.CreateObj

ect("ADODB.Connection")

Page 7: asp

• 连接对象建立后,再使用连接对象的 Open 方法打开数据库。注意创建与打开是两回事。

• Connection 对象实例 .Open 数据库连接字符串• 在上面的数据库连接字符串中,会用到若干参数,

如DSN : ODBC 数据源名称User :数据库登录用户名

Password :数据库登录密码 Driver :数据库的驱动程序类型

Dbq :数据库的物理路径Provider : 数据提供者Data Source :数据库的物理路径

Page 8: asp

• 实际代码的编写中,以上参数并不是全部都要用到,比如一般情况下, Access 数据库不会设置登录名和密码;而有的参数不能同时使用,比如指定了 DSN 数据源,就用不上 Driver 、 Dbq 和 Provider 等。如果用上多个参数,参数之间用分号相隔,顺序没有关系。

Page 9: asp

连接 access 数据库的具体方法 • 基于 ODBC 数据源的连接方式的省略方式 "addre

ss2"• 基于 ODBC 但是没有数据源的连接方式(使用 S

erver.MapPath 转换路径)"Driver={Microsoft Access Driver (*.mdb)};Dbq="Se

rver.MapPath("address.mdb")• 基于 OLE DB 的连接方式(使用 Server.MapPath

转换路径)"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

& Server.Mappath("address.mdb")

Page 10: asp

SQL 数据库的连接方式• SQL 数据库的连接方式与 Access 的基本一样,

不过 SQL 数据库一般有登录账号和密码,因此需要在代码中表示出来。

• 例如有一个 SQL 数据库,数据源名为 zbsdbbszb ,数据库登录账号为 sdzb ,密码为 123456 。<%Set db=Server.CreateObject("ADODB.Connection") db.Open"zbsdbbszb","sdzb","123456" %>

Page 11: asp

• 连接数据库的代码要插入到要操作数据库的 ASP 页面代码之上,如果 ASP 页面数比较多,可以采用包含连接文件的方式进行连接。例,将连接代码转成一个连接文件 conn.asp ,然后在 ASP 页面 <html> 标签前面写上 <!--#include file="conn.asp"--> 。

Page 12: asp

Connection 对象的常用属性

Page 13: asp

Connection 对象的常用属性• ConnectionTimeOut 用于指定连接对象执

行与数据库连接的最长时间,如果超过时间数据库没有连上,则停止执行,语法如下:db.ConnectionTimeout= 秒数

• 默认值 15 秒。• 如果数据库比较慢,可以设置允许连接时

间长些,例如设置时间为 30 秒。<% db.ConnectionTimeout=30 %>

Page 14: asp

• CommandTimeOut 属性用于设置 Connection 对象的 Execute 方法的最长执行时间。

• 默认值为 30 秒。• 执行数据库操作时,如果时间到了仍然无法正确

执行,将结束操作,语法如下:db.CommandTimeout= 秒数

• 可以根据需要设置时间。如果数据库比较慢,可以设置允许操作的时间长些,例如设置时间为 60秒。<% db.CommandTimeout=60 %>

Page 15: asp

• ConnectionString 、 Provider 、 Mode 属性。这几个属性通常用来设置数据库连接信息或连接权限等。其中 ConnectionString属性用于指定数据库连接字符串,如: Provider 属性用于指定 OLE DB 提供者 , 如:conn.Provider="Microsoft.Jet.OLEDB.4.0“

Page 16: asp

• Mode 属性用来设置连接数据库的权限,利用该属性就可以在打开数据库时限制数据库的连接方式,比如只读或只写。Mode 值: 1 只读权限; 2 只写权限; 3 可读可写权限。

• 默认情况下,是可读可写。• 例 <%

Set db=Server.CreateObject("ADOBD.Connection")db.Mode=1db.Open"Dbq="&Server.Mappath("sdadd.mdb")&”;Driver={Microsoft Access Driver(*.mdb)} "%>如果不想对数据库进行修改操作,可以设置连接数据库的权限为只读,这样数据库安全性能好。

Page 17: asp
Page 18: asp

Connection 连接对象的方法

Page 19: asp

Connection 对象的方法 • Open 用于建立 Connection 连接对象与数

据库的连接。• 连接建立后,使用连接对象的 Open 方法打

开数据库,才可以继续进行各种数据库操作。语法如下:

Page 20: asp

• Close 方法用来关闭一个已打开的 Connection 对象。• 语法如下: db.Close• 当与数据库的连接任务完成之后,应关闭这个连接,以释放与这个

连接相关的系统资源。所有信赖于此连接对象的命令对象和记录集对象也将被切断连接关系,

• 当页面关闭后,连接对象也会自动关闭, Close 方法可以省略不写,但最好使用代码形式下达关闭命令。特别是用户量很大的 ASP 程序应该使用代码形式下达关闭连接对象的命令。

• Close 方法关闭记录集对象,并不会将记录集对象从内存中清除。用 Set db=nothing 语句清除这个对象,以完全释放所占用的系统资源。

• 将连接对象彻底清除<%db.CloseSet db=nothing%>

Page 21: asp

• Execute 方法用来执行数据库查询,利用该方法可以完成查询、添加、更新和删除记录的功能。

• 当创建了连接对象并且与数据库连接后,就可以通过连接对象的 Execute 方法直接与数据库对话,对数据库进行添加、更新和删除等操作。

• 有两种语法。• 第一种, Set rs=db.Execute(SQL 字符串 )

rs 是我们给 Recordset 对象取的名字,这种方法将返回一个 Recordset 对象,得到查询操作的记录集。如果对数据库查询操作需要显示记录时就需要用到记录集,一般就要用到这种方法。

Page 22: asp

• 例,返回记录集,并显示记录<%Set db=Server.CreateObject("ADODB.Connection") db.Open"zbsdbbszb"set rs=db.execute("select * from article where name='张三 '") do while not rs.eofresponse.write rs("title")&"<br>"rs.movenextloop%>

Page 23: asp

• 第二种, db.Execute SQL 字符串这种方法不返回一个 Recordset 对象。如果对数据库执行的是添加、删除和更新操作,由于没有必要返回记录集,所以可以采用这种方法。

• 例:执行数据库的删除操作<%Set db=Server.CreateObject("ADODB.Connection") db.Open"zbsdbbszb" strsql="delete from article where name='张三 '"db.execute strsql

• %>

Page 24: asp

• BeginTrans 、 CommitTrans 、 RollbackTrans方法。

• 这三种方法是关于事务处理的。• 其中 BeginTrans 方法用于开始一个事务处理; C

ommitTrans (委托 \递交 ) 方法用于提交事务处理结果,只有执行该方法后,才将结束事务处理通道并且真正更新数据库的内容; RollbackTrans (反转 ) 用于取消事务处理结果,执行该方法后,将结束事务处理通道并且取消当前事务处理中的任何更新动作。

Page 25: asp

事务处理?• 事务是指整体成功或失败的操作,一般性质的数据库操作

没有必要考虑事务处理,但是如果是重要的数据库操作则有必要采用事务处理方式以保证进行可靠的数据更新。例如网上商店系统,在进行交易的时候,用户要把费用从自己的账号转到公司的账号,这项操作一般分两步执行,第一步先从该用户账号上删除这笔款项,第二步再在公司的账号上加上这笔款项,如果在第一步执行后发生意外,第二步则无法进行,这样就会出现账面上的错误。为了防止这种错误,可以将分散执行的数据库操作封装成一个整体操作来完成,以保证两步操作均正确执行,否则一步都不执行,从而保证数据库里数据的完整性。

Page 26: asp

• <%Set db=Server.CreateObject("ADODB.Connection") db.Open"zbsdbbszb" On Error Resume Next ' 如果发生错误,跳过执行下一句db.BeginTrans ' 开始事务处理过程 strSql="Delete from article where name='张三 '" ' 删除记录db.Execute(strSql) strSql="Insert into article (name) values('李四 ')" ' 添加记录db.Execute(strSql)If db.Errors.Count=0 Then ' 如果没有错误发生,则执行下面语句 db.CommitTrans ' 提交事务处理 Elsedb.RollbackTrans ' 如果有错误发生,则取消事务处理End If%>

Page 27: asp
Page 28: asp

Error 对象和 Errors 集合• Error 对象又称为错误对象,是 Connection

对象的子对象。连接时发生错误的可能性大,例如,对服务器的要求已经饱和、连接时所指定的数据源打不开等,因此 Error对象可以看成连接对象的子对象。

• 数据库程序运行时,一个错误就是一个 Error 对象,所有的 Error 对象就组成了 Errors集合,又称错误集合。

Page 29: asp

Errors 集合的属性和方法

Page 30: asp

Error 对象的常用属性

Page 31: asp

Errors 集合

• Count 属性。 Count 返回 Errors 集合中 Error 对象数目,可以用于判断是否有错误发生。如果 Count=0 则表示没有错误发生;Count>0 则表示有错误发生。

Page 32: asp

• Item : 用于创建 Error错误对象。 Errors集合中可能包括多种错误,利用 Item 可以给每个错误对象建立实例。

• Set err=db.Errors.Item(index)省略 Item 为:Set err=db.Errors (index)• 上面语句中 index 为错误索引值,从 0起始,

index取值是从 0 到 Errors.Count-1 的一个长整数, 0 值表示第一个错误,类推。

Page 33: asp
Page 34: asp
Page 35: asp

Recordset 对象• 当用 Command 对象或 Connection 对象执

行查询指令后,就会返回一个记录集对象,该记录集包含满足条件的所有记录,然后就可以利用 ASP 语句将记录集的数据显示在页面上。

• 一般只有在查询记录时才会需要建立 Recordset对象。而插入、删除和修改记录时则不需要返回记录集,所以一般就利用 Connection对象的 Execute方法就可以了。

Page 36: asp
Page 37: asp

建立 Recordset 对象• Set Recordset 对象实例 =Server.CreateO

bject("ADODB.Recordset")

• Recordset 对象实例 .Open [Source], [ActiveConnection], [CursorType], [LockType], [Options]

Page 38: asp
Page 39: asp

指针类型 ---CursorType 参数值• 0 向前指针,默认值。向前单向移动指针,

所耗系统资源最少,执行速度也最快,但很多属性和方法将不能用。

• 1 键盘指针,记录集中可以前后移动。

Page 40: asp

LockType 参数值 • 1 只读,默认值,适用于仅浏览数据。执

行速度快,消耗系统资源少。• 2 ,只能同时被一个用户所修改,修改时锁

定,完毕解锁

Page 41: asp

建立 Recordset 对象的方法 • 利用 Connection 对象的 Execute 方法建立<%Dim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open "address"Dim rsSet rs=conn.Execute("Select * From tbAddress")%>• 这种方法是最常用的方法。但功能有限。

Page 42: asp

• 利用 Connection 对象但明确建立 Recordset 对象的方式 • <%Dim connSet conn=Server.CreateObject("ADODB.Connection")conn.Open "address"Dim rsSet rs=Server.CreateObject("ADODB.Recordset")rs.Open "Select * From tbAddress",conn,1,2,1 %>• 说明:这是将方法一修改为明确建立 Recordset 对象。通

过参数配置,增强功能,还可用于删除、添加、修改等操作。

Page 43: asp

Recordset 对象的重要属性• Source 、 ActiveConnection 、 CursorType 、 LockType

属性• 这一组属性主要用于设定记录集的特性。• <%Dim rsSet rs=Server.CreateObject("ADODB.Recordset")rs.Source="Select * From tbAddress“rs.ActiveConnection=connrs.CursorType=1 ' 设置为键盘指针,可前后移rs.LockType=2 ' 设置可被一个客户修改rs.Open ' 打开记录集%>

Page 44: asp

RecordCount 属性

• 该属性用于返回记录集中的记录总数。例如下面语句将输出记录总数:

<% Response.Write rs.RecordCount %>

Page 45: asp

Bof 、 Eof 属性• 这两个属性用于判断当前记录指针是否指向记录集的开头或结尾或为空。

• 如果记录集为空,指针同时指向 Bof 、 Eof 。

Page 46: asp

• < %if not rs.bof and rs.eof then ' 如果不是开头,也不是结尾,则执行…End if%>

Page 47: asp

• 循环输出记录集记录的代码如下:< %Do while not rs.eof ' 如果没有到达记录集未尾,则循环输出下面的记录…Rs.MoveNextLoop%>

Page 48: asp

PageSize 、 PageCount 、 AbsolutePage 、 AbsolutePosition 属性

• 这一组属性用来完成分页显示数据的功能。• PageSize 属性用于设置每一页的记录数。

例如下面语句将设置每页显示 10条记录:<% rs.PageSize =10 %>

• PageCount 属性:用于返回数据页的总数 ,如下面语句将输出数据页总数:

<% Response.Write rs.PageCount %>

Page 49: asp

• AbsolutePage 属性:用于设置当前指针指向哪一页,如下面语句将指向第 2 页:

<% rs.AbsolutePage=2 %>• AbsolutePosition 属性:用于设置当前指针

指向的记录行的绝对值,如下面语句将指向第 10条记录:

<% rs.AbsolutePosition=10 %>• 利用这几个属性时一般也要求设置指针类

型为 1 (键盘指针)

Page 50: asp

分页显示数据•首先显示第 1页数据,并且在下方提供

页码链接,当客户选择页码时,仍然传递到本文件,并显示新的一页。

Page 51: asp

分页显示记录代码<%建立连接,代码略 ' 以下建立 Recordset 对象实例 rsDim rs,strSqlSet rs=Server.CreateObject("ADODB.Recordset")strSql ="Select * From tbAddress"rs.Open strSql,conn,1 ' 注意参数设置为键盘指针

Page 52: asp

' 如果记录集不是空的,就执行分页显示If Not rs.Bof And Not rs.Eof Then

' 下面一段判断当前显示第几页,如果是第一次打开,为 1 ,否则由传回参数决定Dim intPage If Request.QueryString("varPage")="" Then

intPage=1 Else

intPage=CInt(Request.QueryString("varPage")) ' 用 CInt 转换为整数End If' 下面一段开始分页显示,指向要显示的页,然后逐条显示当前页的所有记录。rs.PageSize=5 ' 设置每页 5条记录rs.AbsolutePage=intPage ' 设置当前显示第几页' 下面利用循环显示当前页的所有记录,并显示在表格中Response.Write "<table border='1' width='100%'><tr bgcolor='#E0E0E0'>"Response.Write "<th>姓名 </th><th> 电话 </th><th>E-mail</th> <th> 添加日期 </th></tr>"

Page 53: asp

Dim I ' 定义一个变量 IFor I=1 To rs.PageSize

If rs.Eof Then Exit For' 如果到了记录集结尾,就跳出循环Response.Write "<tr>"Response.Write "<td>" & rs("strName") & "</td>"Response.Write "<td>" & rs("strTel") & "</td>"Response.Write "<td>" & rs("strEmail") & "</td>"Response.Write "<td>" & rs("dtmSubmit") & "</td>"Response.Write "</tr>"rs.MoveNext

NextResponse.Write "</table>"

Page 54: asp

' 下面一段依次输出第 1 页、上一页、下一页和最后页的超链接Response.Write "<p><a href='9-12.asp?varPage=1'>第 1 页 </a>&nbsp;"If intPage>1 ThenResponse.Write "<a href='9-12.asp?varPage=" & (intPage-1) & "'> 上一页 </a>&nbsp;"ElseResponse.Write " 上一页 &nbsp;"End IfIf intPage<rs.PageCount ThenResponse.Write "<a href='9-12.asp?varPage=" & (intPage+1) & "'> 下一页 </a>&nbsp;"ElseResponse.Write " 下一页 &nbsp;"End IfResponse.Write "<a href='9-12.asp?varPage=" & rs.PageCount & "'> 最后页 </a>&nbsp;

ElseResponse.Write " 该记录集为空 "

End If%>

Page 55: asp

Recordset 对象的重要方法

Page 56: asp

Open 、 Close 方法• Open 方法用于打开一个记录集。• Close 方法用于关闭记录集。例如:<% rs.Close %>

Page 57: asp

MoveFirst 、 MovePrevious 、 MoveNext 、 MoveLast 、 Move 方法

• MoveFirst 方法用于将记录指针移动到第 1条记录。• MovePrevious 方法用于将记录指针向后(或向

上)移动一条记录。• MoveNext 方法用于将记录指针向前(或向下)移动一条记录。

• MoveLast 方法用于将指针移动到最后一条记录。• Move 方法用于将指针移动到指定的记录。语法为:Recordset 对象 .Move number,start其中 start 表示指针移动的开始位置,如省略默认为

当前指针位置; number 表示从 start 设置的起始位置向前或向后移动 number条记录

Page 58: asp

AddNew 、 Delete 、 Update 、 CancelUpdate 方法

• 用来添加、删除和更新记录。• 添加记录时一般要同时用到 AddNew 方法

和 Update 方法,例如:<%rs.AddNewrs("strName")="李玫 "rs.Update%>

Page 59: asp

• 删除记录时比较简单,首先将指针移动到要删除的记录,然后利用 Delete 方法就可以删除当前记录,不过还要用 Update 方法更新数据库。

• 更新记录时首先将指针移动到要更新记录,然后直接给字段赋值,之后使用 Update 方法更新数据库即可。

• CancelUpdate 方法用来取消刚才添加、删除和更新记录的操作。

Page 60: asp

利用 Recordset 对象存取数据库• 利用 Recordset对象也可以执行查询、添

加、删除和更新记录的操作• 添加、删除和更新记录就要用到 AddNew、Delete和 Update方法。

Page 61: asp

删除记录的操作

• <%Set db=Server.CreateObject("ADODB.Connection")db.Open "zbsdbbszb" Set rs=Server.CreateObject("ADODB.Recordset")Sql ="Select * From article where name='张三 '"rs.Open Sql,db,0,2 ' 锁定类型为可以修改' 删除记录rs.delete %>