6.1 ADO数据访问接口概述使用 ADO (A ctiveX D ata O bject,ActiovX 数据对象),可以对几乎所有数据库(如 Microsoft多媒体讲解Access,Microsoft SQL Server 和 Oracle 等)进行读取和写入。
ADO 常用的四种对象及其功能:•连接对象(Connection):用来连接数据库。
•记录集对象(RecordSet):用来保存查询语句返回的结果。
•命令对象(Command):用来执行 SQL 语句或者 SQL Server 的存储过程。
•参数对象(Parameter):用来为存储过程或查询提供参数。
6.2 Connection数据对象与数据库的所有通信都通过一个打开的 Connection 对象进行。
对一个数据库进行数据的插入和读取之前,必须先打开数据库连接。
当使用 ADO 打开数据库的时候,会有一个指针指向某一行记录,默认的情况下,该指针指向数据库的第一行。
假定该指针为“rs“,如果要访问数据库表的字段,可以用下图所示的方法。
多媒体讲解,举例讲解,对比讲解6.2.1 打开和关闭数据库连接要建立与一个数据库的连接,首先创建 Connection 对象的一个实例,然后调用 Connection 对象的 Open 方法打开一个连接,并通过程序 6-01.asp 输出数据库表头。
实例:输出数据库的表头(6-01.asp)<HTML> <BODY> <UL><%set conn = Server.CreateObject("ADODB.Connection")conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_Server.MapPath("person.mdb"))set rs = conn.Execute( "SELECT * FROM grade" )For I = 0 to rs.Fields.Count - 1Response.Write("<LI>" & rs(I).Name)Nextconn.close()%></UL> </BODY> </HTML>本例子解析:(1)利用 Connection 对象的 Open 方法打开当前目录下的 person.mdb 文件。
(2)然后执行一个 SQL 语句中的 grade 是一个表名。
(3)rs.Fields.Count 返回数据表的列数。
(4)程序需要折行使用符号“ &_ ”连接。
思考:1. 运行6-01.asp,浏览器输出结果是什么?2. 在6-02.asp的For语句中,把“rs(I).Name”改成“rs(I)”,浏览器输出什么?解答:1. 浏览器输出表头和第一条记录:•学号•性别•姓名•语文•数学•英语2. 浏览器输出表头和第一条记录:•14•男•小周•50•200•80 课本实例讲解,多媒体讲解一步步提示,举例讲解,对比讲解,多媒体讲解分析,多媒体讲解提醒学生这个格式要掌握格式一:数据库调用的基本格式格式说明:利用 Execute 方法执行 SQL 语句第一步:建立 Connection 对象set conn = Server.CreateObject("ADODB.Connection")第二步:使用 Connection 对象的 Open 方法建立数据库连接conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_ Server.MapPath("person.mdb"))第三步:使用 Connection 对象的 Execute 方法执行 SQL 语句‘如果执行查询语句set rs = conn.Execute("数据查询语句")'如果执行数据操纵语句conn.Execute("数据操纵语句")6.2.3 向浏览器输出数据库内容实例:输出第一条记录(6-02.asp)<HTML> <BODY><UL><%set conn = Server.CreateObject("ADODB.Connection")conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_Server.MapPath("person.mdb"))set rs = conn.Execute( "SELECT * FROM grade" )For I = 0 to rs.Fields.Count - 1Response.Write("<LI>" & rs(I).Name & " = " & rs(I))Nextconn.close()%></UL></BODY> </HTML>本例子解析:(1)本例输出数据表的表头和第一条记录。
(2)数据库第一次打开时,这个指针定位在第一行,用 MoveNext( ) 向后移动指针。
思考:1. 运行6-02.asp,浏览器输出结果是什么?2. 在6-02.asp的For语句之前加入语句“rs.MoveNext( )”,浏览器输出什么?3. 可以用表格的形式输出记录么?解答:1. 浏览器输出表头和第一条记录:•学号 = 14•性别 = 男•姓名 = 小周•语文 = 50•数学 = 200•英语 = 802. 浏览器输出表头和第二条记录:•学号 = 15•性别 = 女•姓名 = 小刘•语文 = 500•数学 = 100•英语 = 10003. 可以,请参考课本101页的案例5-01.asp的输出代码。
6.2.4 输出所有数据本节主要学习使用的三条语句:•rs.MoveNext( ):移动到下一条记录。
•rs.BOF:Begin Of File ,文件开头,用于判断记录指针是否移动最前面,理解其的位置为第一条记录之前。
如果数据表中没有记录,rs.BOF 为真。
•rs.EOF:End Of File ,文件结尾,用于判断记录指针是否移动最后面,理解其的位置为最后一条记录之后。
若 rs 指针在最后一条记录上,再执行一次 movenext时,则rs.EOF 为真。
课本实例讲解,多媒体讲解一步步提示,举例讲解,对比讲解,多媒体讲解实例:以表格的形式输出(6-03.asp)<HTML><BODY><%set conn = Server.CreateObject("ADODB.Connection")conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_Server.MapPath("person.mdb"))set rs = conn.Execute( "SELECT * FROM grade" )Response.write ("<TABLE BORDER=1>")Response.write ("<TR>")' Part I输出"表头名称"For i=0 to rs.Fields.Count-1Response.Write("<TD><B>" & rs(i).Name & "</B></FONT></TD>") NextResponse.write ("</TR>")%><%' Part II输出数据表的"内容"rs.MoveFirst() ' 将目前的数据记录移到第一项While Not rs.EOF' 判断是否过了最后一项Row = "<TR ALIGN=MIDDLE>"For i=0 to rs.Fields.Count-1Row = Row & "<TD>" & rs(i) & "</TD>"NextResponse.Write(Row & "</TR>")rs.MoveNext() ' 移到下一项Wendconn.close()%></BODY> </HTML>本例子解析:(1)利用一个循环将所有数据用表格的形式输出到浏览器上。
(2)每次循环让 RecordSet 对象向下移动一次,直到移动到最后一条记录为止。
实例:编写输出函数(6-04.asp)<HTML><BODY><%set conn = Server.CreateObject("ADODB.Connection")conn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" &_Server.MapPath("person.mdb"))set rs = conn.Execute( "SELECT * FROM grade" )rstotab(rs)conn.close()%><%Function rstotab(rs)Response.write ("<TABLE BORDER=1>")Response.write ("<TR>")' Part I输出"表头名称"For i=0 to rs.Fields.Count-1Response.Write("<TD><B>" & rs(i).Name & "</B></FONT></TD>") NextResponse.write ("</TR>") 课本实例讲解,多媒体讲解,与后面的实例6-04.asp进行比较,分析讲解函数功能:以表格的形式输出数据教学基本内容方法及手段' Part II输出数据表的"内容"rs.MoveFirst() ' 将目前的数据记录移到第一项While Not rs.EOF ' 判断是否过了最后一项Row = "<TR ALIGN=MIDDLE>"For i=0 to rs.Fields.Count-1Row = Row & "<TD>" & rs(i) & "</TD>"NextResponse.Write(Row & "</TR>")rs.MoveNext() ' 移到下一项WendEnd Function%></BODY> </HTML>本例子解析:(1)显示结果和上个例子一样。