1、第十章 数据库的读取、插入、删除与更新10.1 ASP 与数据库在第一章我们介绍了数据库的基本概念,在第五章到第八章介绍了Cookie、Application 变量、Session 变量、服务器文件访问等存储数据库的方法,现在我们就把这些方法与数据库做一个比较,如下表所示:存储数据的方法 比 较Cookie优点:可以记录浏览者的信息并决定 Cookie 的生命周期。Cookie 存放在浏览器端,不会占用服务器端的空间。缺点:浏览者可能禁止服务器在浏览器端写入 Cookie。只能记录字符串、数值、日期等简单的数据类型,无法记录对象、数组等复杂的数据类型。Cookie 存放在浏览器端,有可能被浏览
2、者删除而遗失。Cookie 可能造成安全上的威胁,导致个人信息被窃取。Application 变量优点:可以记录整个网站的信息。缺点:若服务器关机或超过 20 分钟没有人访问网页,Application 对象所记录的任何变量都将恢复为 Empty。Session 变量优点:可以记录个别浏览器端的信息。缺点:若浏览者在 20 分钟之内没有再访问网页,Session 对象所记录的任何变量都将恢复为 Empty。服务器端文件访问优点:适合记录少量数据,可进行写入或读取,而且没有生命周期的问题。缺点:当数据量很大时,文件的访问将变得没有效率。数据库优点:适合记录大量数据,可进行读取、插入、删除、更新与
3、查询。缺点:虽然数据库的查询速度快,但打开数据库连接则需花费较多的时间。ASP 是通过一组统称为 ADO(ActiveX Data Objects)的对象模块来访问数据库,无论你采用的是 Access、SQL Server、Visual FoxPro、Informix、Oracle、dBase 或其他数据库,只要该数据库具有对应的ODBC 或 OLE DB 驱动程序,ADO 对象就能加以访问。ASP 提供的 ADO 对象模块包含了下列 6 个对象和 3 个集合,比较常用的则是Connection、Recordset、Command、Field 等对象。 Connection 对象:打开、关闭与
4、数据源的连接 Recordset 对象:访问表的记录,包括读取、插入、删除或更新表的记录。 Command 对象:包含关于某个命令,例如查询字符串、参数定义等的信息。 Field 对象: 包含记录集中数据的某单个列的信息。 Error 对象: 包含数据提供程序出错时的扩展信息。 Parameter 对象:包含参数化的 Command 对象的某单个参数的信息。该 Command 对象有一个包含其所有 Parameter 对象的 Parameters 集合。 Fields 集合:包含 Recordset 对象的所有 Field 对象。 Parameters 集合:包含 Command 对象的所有
5、Parameter 对象。 Errors 集合:包含为响应涉及提供者的单个错误而创建的所有 Error 对象。10.2 建立 Access 数据库虽然不同的系统可能安装不同的 ODBC 或 OLE DB 驱动程序,但只要你安装PWS 40 或 IlS4050,系统上至少会有 Microsoft Access Drive、Microsoft ODBC for Oracle、SOLServer 等 ODBC 驱动程序,换句话说,你至少可以使用 Access、Oracle、SQLServer 等 3 种数据库来从事 ASP 网页数据库设计。如果你的系统还安装了 MicrosoftExcel Driv
6、er、dbase Driver、VisualFoxProDriver、TextDriver 等 ODBC 驱动程序,那么你可以有更多的数据库可选择。由于 MicrosoftAccess 2000 属于 Office2000 家族,获取较为容易,且界面和 Office 家族相似,学习起来基本没什么障碍,因此,我们将采用 Access 2000 来进行网页数据库设计。Access 2000 数据库的建立方法可以分成两个阶段,第一个阶段是根据要输入的数据性质,新增表并设置表的字段名称、数据类型和语句,第二个阶段才是在表内输入数据。10.3 打开与关闭数据库连接在访问数据库之前,我们必须使用 ADO
7、对象模块的 Connection 对象打开数据库连接。打开数据库连接的完整代码如下:01: 关闭数据库连接的完整代码如下:01: 10.4 读取、插入、更新与删除表的记录在使用 Connection 对象打开数据库连接之后,我们可以使用 Recordset 对象访问表的记录。建立 Recordset 对象实例的方法如下:Set objRS=Server.CreateObject(“ADODB.Recordset”)10.4.1 读取表的记录这里,我们将以 Friend.mdb 数据库文件为例,讲解如何读取表的记录,然后将目前指针所指到的记录显示在浏览器上。程序代码如下:01:02: 03: 0
8、5: Dim objConn06: Set objConn = Server.CreateObject(“ADODB.Connection“)07: objConn.ConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0;“ 关闭数据库连接并释放对象实例30: objRS.Close 31: Set objRS = Nothing 32: objConn.Close 33: Set objConn = Nothing 34: %35: 36: 37:10.4.3 使用 Recordeset 对象的 Sort 属性进行排序将 Recordeset
9、 对象进行排序的方法有两种,其一是使用 Recordeset 对象的 Sort 属性,其二是使用 SQL 语句,这里我们介绍第一种方法,至于第二种方法我们在以后再介绍。现在,我们来看个例子。这个例子的数据库文件为 Grades.mdb,表名为成绩单,总共有 10 条记录,如果我们依照语文分数由低到高进行排序,则可以写成如下:objRS.Sort=语文,相反的,如果我们依照语文分数由高到低进行排序,则可以写成如下:objRS.Sort=语文 DESC10.4.4 使用 Recordeset 对象的 Filter 属性筛选记录当我们使用 Recordeset 对象的 Open 方法打开表时,所读取
10、到的将是整个表的所有记录,但有时候我们会需要把筛选范围限制在符合某些条件的记录,例如语文成绩在 90 分以上的记录,此时,我们可以利用 Recordeset 对象的Filter 属性来筛选记录,例如:objRS.Filter=语文90现在,我们来看下面的例子:90 OR 数学 90“%“ & objRS.Fields(I).Name & “Next %“For I = 0 To objRS.Fields.Count - 1Data = Data & “ & objRS.Fields(I).Value & “Next Response.Write Data & “objRS.MoveNextLoop关闭数据库连接并释放对象实例bjRS.Close Set objRS = Nothing objConn.Close Set objConn = Nothing %10.4.5 设置分页浏览当表包含很多记录而无法显示在同一页时,我们可以设置分页浏览,将记录分成数页来显示。现在,我们一起来看下面的例子: