950 likes | 1.12k Views
ASP 访问数据库. 本节目录. ASP 访问数据库概述 ADO 组件介绍 ADO 的数据对象 Connection 对象 RecordSet 对象 Command 对象. 网站数据库化. 网站数据库化 将网站数据库化,就是使用 数据库 来管理整个网站。只要更新数据库的内容,网站的内容就会被自动更新。将网站数据库化的好处如下: ① 可以 自动更新网页 。采用数据库管理,只要更新数据库的数据,网页内容就会自动得到更新,过期的网页也可以被自动拿掉。
E N D
本节目录 • ASP访问数据库概述 • ADO组件介绍 • ADO的数据对象 • Connection对象 • RecordSet对象 • Command对象
网站数据库化 • 网站数据库化 • 将网站数据库化,就是使用数据库来管理整个网站。只要更新数据库的内容,网站的内容就会被自动更新。将网站数据库化的好处如下: • ① 可以自动更新网页。采用数据库管理,只要更新数据库的数据,网页内容就会自动得到更新,过期的网页也可以被自动拿掉。 • ② 加强搜索功能。将网站的内容储存在数据库中,可以利用数据库提供的强大搜索功能,从多个方面搜寻网站的数据。
网站数据库化 • ③ 可以实现各种基于Web数据库的应用。使用者只要使用浏览器,就可以通过Internet或Intranet内部网络,存取Web数据库的数据。可以使用在学校教学、医院、商业、银行、股市、运输旅游等各种应用上。例如银行余额查询、在线购书、在线查询、在线预定机票、在线医院预约挂号、在线电话费查询、在线股市买卖交易、在线学校注册选课,以及在线择友等。
数据库的选择 • 大型站点中一般采用SQL Server、Oracle等数据库. • 对于小型站点,也可以用Access数据库。 • 读取Access数据库和读取SQL Server数据库基本上是一样的,如要改成读取SQL Server库,程序几乎不用改动
问题 • 如何将一个数据库中的表显示在网页上?
步骤 • 连接数据库(Connection对象) • 通过执行SQL语句将数据库中的一个表或某些记录读取到内存中(创建记录集) • 将该表中的字段输出到网页上
连接数据库的方法 • 通过ADO 技术 • ADO(ActiveX Data Object)是 ASP 内置的、用于访问Web数据库的ActiveX服务器组件,包含多种对象和集合供Web数据库应用的开发者使用。 • 作为一种既易于使用又可扩展的技术,ADO可以用于向网页添加数据库访问。
ADO简介 ADO是一种允许用户与数据存储进行交互的组件,是一种数据库访问技术。它与我们的OLEDB和ODBC紧密相关。ADO调用先被送到OLEDB,然后再交由ODBC处理。ODBC根据所提供的参数(如数据库驱动、数据库名称)进行数据访问。
ADO 组件对象简介 • ADO 组件主要提供了 7 种对象和 4 种集合供 Web应用程序的开发者使用,通过这些对象和集合,可以方便地建立与Web数据库的连接、执行 SQL 查询并处理查询得到的结果。 • 其中,Connection 对象、Command 对象和Recordset 对象是最基本也是最重要的对象。
数据库 Connection对象 ADO Command对象 Recordset对象 网页 ADO组件的作用示意图 轻松的实现实现数据库数据的查询、添加、删除、修改等功能,方便数据库的维护或网站的维护。
网页访问数据库的基本思路 • 建立数据库连接对象(connection对象),并连接数据库 • 设置数据表操作的SQL命令,选择connection对象或recordset对象来执行 • 确认数据表操作结果是否需要显示,如果要则输出recordset对象的各个字段
Connection 对象 Connection 对象的常用方法 1.Open 方法 2.Execute 方法 3.Close 方法
Connection.open方法 • <% Dim conn Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Inetpub\wwwroot\address.mdb" %>
ConnectionString 连接字符串 • ConnectionString 连接字符串是一系列用分号分隔的参数,用于定义诸如数据源提供程序和数据源位置等参数。 • 1. 常用 OLE DB 连接字符串 • 2. 常用 ODBC 连接字符串
连接数据库(2) • (2)基于ODBC,但是不用数据源的连接方式: • <% Dim conn Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Inetpub\wwwroot\address.mdb" %> • 对于方式2,通常可以利用Server对象的MapPath方法将相对路径转换为物理路径, 因此最后一句可改写为: conn.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("address.mdb")
3)基于OLE DB的连接方式 • <% Dim conn Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\asptemp\chapter8\address.mdb" %> • 方式3中也可以使用Server.MapPath方法将相对路径转化为物理路径 ,如下: conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("address.mdb")
获取OLEDB连接字符串的方法 • 新建一个.udl(通用数据链接文件)的文件
Connection.close方法 • 当不再需要连接对象时,需要使用Close方法来关闭连接以释放系统资源 Conn.close Set conn=nothing • 关闭对象并非将它从内存中清除,以后仍可以用Open方法再次打开它,若要将对象从内存中完全清除,可将对象变量设置为Nothing
Connection.execute方法 • Connection.execute方法可以将命令发布到数据源,这个命令可以是一条SQL命令,也可以是一个表名。 • 举例 • set rs=conn.execute("select * from lyb") • set rs=conn.execute("lyb") • 注意:如果前面有“set rs=”则括号不能省略,否则括号可省略。 • conn.execute "delete from lyb where id="&id
利用Connection对象执行数据存取 • 连接上数据库后,就可以应用connection对象的execute方法对数据库中的数据执行操作。 • set recordSet对象=connection对象.execute (SQL语句字符串) 或 • connection对象.execute(SQL语句字符串) 数据库记录查询 数据库记录的删除、修改、增添
connection对象.execute 方法的number参数 • 在查询、删除、修改等操作中,有时希望知道connection对象.execute 方法影响了多少条记录,怎么办? 返回此次操作影响的记录条数 connection对象.executeSQL语句字符串,number <% strSQL=”Delete from users where name=‘李枚’” db.execute strSQL,number1 response.write “共删除”& number1 & “条记录” %>
rs rs rs.bof=true rs rs.eof=true 记录集及指针的概念 • 通过connection对象conn的Execute方法执行查询SQL语句,得到一个虚拟的记录集,可建立RecordSet对象作为记录集的指针。 rs.moveNext, rs.moveProvious, rs.movefirst, rs.movelast, rs.move n。
rs 获取记录集中的字段 • 假设此时记录集指针 rs 指向第一条记录, • 该记录的每个字段值用 rs(“字段名”)获取。rs(“字段名”)就是标识对应记录的某个字段的值。如: • rs(“id”)可以获取指定记录的编号 • rs(“author”)可以获取指定记录的作者名称
思 考 • 我们刚才读取了 rs 所指向的一条记录的数据,但是一般情况记录集中有多条记录,如何能把每条记录都读取出来呢? • 在读完一条记录后,用 rs 的 moveNext 方法,使 rs 移到下一条记录,再按照刚才所说的方法来读取每项数据。直到我们的 rs 移到了记录集的结尾,也就是rs.eof=true时。
一个记录集是由若干条记录组成的,记录又是由字段组成的,每个字段就是一个field对象,所有的field对象组成一个fields集合。 • Field对象是recordset对象的子对象,所以通过recordset对象的移动和recordset对象子对象field对象的引用方法可以读取每条记录每个字段的值。
要把记录显示在页面上,就需要用到SQL语言的Select语句。具体过程如下:要把记录显示在页面上,就需要用到SQL语言的Select语句。具体过程如下: • (1)首先利用Connection对象连接数据库。 • (2)其次利用Connection对象的Execute方法执行一条Select语句,该方法就会返回一个记录集对象(Recordset)。 • 所谓记录集,类似于一个数据库中的表,由若干列和若干行组成,可以看做一个虚拟的表。 • (3)在记录集中利用循环移动指针就可以依次读取所有的记录了。
rs Recordset对象 的功能 RecordSet对象的概述 • 当我们对数据库进行操作时,特别是查询符合条件的数据记录时,往往要把查询到的记录显示出来。这时就需要设置一个Recordset对象来标记这个记录集。 数据库的增添、删除、修改 数据的查询和分页显示
创建RecordSet对象 方 法 一 :conn.Execute的方法 <% Dim conn,rs Set conn=Server.CreateObject("ADODB.Connection") conn.Open "Dbq=" & Server.Mappath("address.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}“ Set rs=conn.Execute(select * from users) %>
创建RecordSet对象 方 法 二 :Open方法 <% dim conn set conn=Server.CreateObject("ADODB.Connection") conn.open("Dbq=" & Server.Mappath("lyb.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}" ) dim rs set rs=Server.CreateObject("ADODB.Recordset") rs.open (“select * from lyb"),conn %>
建立Recordset对象 • 语法: • Set Recordset对象=Server.CreateObject ("ADODB.Recordset") • 一般情况下,应先建立connection对象,再来建立Recordset对象
Recordset对象的重要方法(2) • MoveFirst、MovePrevious、MoveNext、MoveLast、Move方法 • MoveFirst方法用于将记录指针移动到第1条记录。 • MovePrevious方法用于将记录指针向后(或向上)移动一条记录。 • MoveNext方法用于将记录指针向前(或向下)移动一条记录。 • MoveLast方法用于将指针移动到最后一条记录。 • Move方法用于将指针移动到指定的记录。语法为: • Recordset对象.Move number,start • 其中start表示指针移动的开始位置,如省略默认为当前指针位置;number表示从start设置的起始位置向前或向后移动number条记录
rs.Fields的属性 • rs(3).Name = rs.Fields(3).Name = "数学"; • rs(4).Name="英语"; • 假设当前的记录指向第三条,那么 • rs(1).Value=rs("姓名")=rs(1)= "张敏" • rs(4).Value=rs(4)=rs("英语")=200
(3)RecordCount属性 • 该属性用于返回记录集中的记录总数。例如下面语句将输出记录总数: <% Response.Write rs.RecordCount %> • (4)Bof、Eof属性 • 这两个属性用于判断当前记录指针是否指向记录集的开头或结尾,返回值为True或False。当指针指向开头(第一条记录之前)时,Bof属性的值为True;当指针指向结尾(最后一条记录之后)时,Eof属性的值为True。
Recordset对象的重要方法(1) • Open、Close、Requery方法 • 这一组方法主要是关于Recordset对象本身的。其中Open方法在上一节已经详细讲解过,用于打开一个记录集。 • Close方法用于关闭记录集。例如: • <% rs.Close %> • Requery方法用于重新打开记录集,相当于先关闭再打开。例如: • <% rs.Requery %>
Recordset对象的重要方法(3) • AddNew、Delete、Update、CancelUpdate方法 • 这一组方法用来添加、删除和更新记录。 • 添加记录时一般要同时用到AddNew方法和Update方法,例如: • <% • rs.AddNew • rs("strName")="李玫" • rs.Update • %> • 删除记录时比较简单,首先将指针移动到要删除的记录,然后利用Delete方法就可以删除当前记录,不过还要用Update方法更新数据库。 • CancelUpdate方法用来取消刚才添加、删除和更新记录的操作。
(1)由于我们删除记录时不生成记录集,所以没有必要设置记录集rs。(1)由于我们删除记录时不生成记录集,所以没有必要设置记录集rs。 (2)SQL语句中用到了一个传递参数。 (3)在SQL语句中,如果连接的参数是数值型,则不要在参数两边加单引号,如果是字符则要加单引号,如果是日期型则加#
不带传递参数的SQL和带传递参数的SQL • sqlstr1=”select * from link where link_id=5” • sqlstr1=”select * from link where name=‘搜狐’” • sqlstr1=”select * from link where link_id=” & linked • sqlstr1=”select * from link where name=‘” & netName & ”’”
Recordset对象的重要方法(4) • Find方法 • 该方法用来查找符合条件的单个记录,语法如下: • Recordset对象实例.Find criteria, skipRows, searchDirection, start • 下面来看两个常用的例子: • <% • rs.Find "intAge<20" '向前查找年龄小于20的人员 • rs.Find "intAge<20",0,-1 '向后查找年龄小于20的人员%>
建立Recordset对象的总结 • 一般只有在查询记录时才会需要建立Recordset对象。而插入、删除和修改记录时则不需要返回记录集,所以一般就利用Connection对象或Command对象的Execute方法就可以了。 • 关于记录集 • 记录集,好比内存中的虚拟数据表,保存了满足查找条件的所有记录。
本节目录 • 插入、删除和修改记录的作用 • SQL语言复习 • 插入记录的方法 • 删除记录的方法 • 修改记录的方法
插入、删除和修改记录的作用 • 通过将记录集中的数据显示在网页上,实现了读取数据库中的内容到网页上 • 但是有时我们经常还需要向数据库中写入数据,或通过在网页修改数据库中数据,这时就需要用到插入、删除和修改记录了。
SQL语言 • 查询语句 Select • 插入语句 INSERT INTO • 删除语句 DELETE • 修改语句UPDATE
1.查询(SELECT) • Select语句用于从数据库中获得一些信息,如从一个表中获得部分记录的部分字段内容,从多个表中组合形成一个新的记录集等 • SELECT 书名,书价 FROM 书目表 WHERE 类型=‘文学’AND 价格>25
2.插入(INSERT) • Insert语句用于向表中添加一个或多个记录。可以将一组值作为一个记录追加到表中,形式为: INSERT INTO 表名[(字段名表)] VALUES (值的列表) • 其中: 如果“值的列表”中包含了所有字段的值,则格式中字段名表可以省略。 “字段名表”和“值的列表”中各数据的类型必须保持一致,个数也要保持一致。
例如:在只包含姓名和年龄的学生表中插入一个姓名为“张三”,年龄为23的记录的形式如下:例如:在只包含姓名和年龄的学生表中插入一个姓名为“张三”,年龄为23的记录的形式如下: INSERT INTO 学生表VALUES(‘张三’,23) • 其中字符型常量“张三”用单引号括起来,数值型常量23不用定界符。如果学生表中还有其它字段,则上述语句执行时会产生错误。
3.删除(DELETE) • Delete语句可从表中删除满足一定条件的一个记录或一组记录。使用形式如下: DELETE FROM 表名WHERE 条件 • 其中,表名指出需要删除一个或多个记录的数据表名称。该命令一次可能删除多个记录。