1、第四章 Web数据库处理,ADO介绍 如何建立、打开与关闭连接的数据库 如何取得数据库的数据 如何查询、新增及删除数据,4-1 ADO介绍,在ASP中可以通过ADO对象(ActiveX Data Object简称ADO)与SQL语法(Structured Query Language结构化查询语言)做到存取服务器端数据库的数据。ADO主要是提供一个存取Web Database的方法。ADO是ASP的重要内建对象之一,凡是由ODBC驱动程序所能存取的数据库,都可以通过ADO对象来存取里面的数据,对这些数据做新增、修改数据的操作。ADO是由ADODB对象库与7个子对象Connection、Comm
2、and、Parameter、RecordSet、Fields、Properties、Error以及4个数据集合Parameter、Fields、Properties、Error所构成。,4-2 如何建立、打开与关闭连接的数据库,当我们欲存取服务器端数据库的数据时,首先要做的一件事,就是与服务器的数据库建立连接。这需要用ADO对象中的Connection对象,它常用的方法是: 1.Open方法:建立并打开一个数据库的连接; 2.Close方法:将连接的数据库关闭; 3.Execute方法:执行SQL命令,以进行新增、修改、删除或查询服务器端数据库的数据。,Connection对象,Step1:产
3、生连接对象变量: Set newconn=Server.CreateObject(“ADODB.Connection”) ADODB是ADO对象的对象库,而Connection是ADO对象库中的一个子对象,因此可以写成ADODB.Connection。 Connection对象可以使用Server对象的CreateObject方法来产生一个名称为newconn的连接对象。,Step2:取得目前数据库真实路径并指定给DBPath变量: DBPath=Server.MapPath(“dbname”) 通过Server对象的MapPath方法取得连接数据库所在的真实路径,并将取得的真实路径指定给DB
4、Path字符串变量,其中dbname为数据库文件的路径名称。 Step3:开启指定的连接数据库: Newconn.Open “driver=dbdrvname;dbq=“Data Source=“&DBPath Newconn参数是Step1延续过来的连接对象。 Dbdrvname参数指所使用数据库的驱动程序名称必须和Step2的”dbname”相同类型。 Step4:完成数据库的存取后,使用Close方法将newconn所连接的数据库关闭: Newconn.Close,4-3 如何取得数据库的数据,如何设定Recordset对象的对象变量 Set RS=newconn.Execute(SQL
5、cmd|tblname) 1.newconn参数为Connection对象变量,由上一节Server.CreateObject得来的。 2.RS参数为Recordset的缩写,以此当Recordset对象变量可读性较高。 3.SQLcmd命令会根据Select的条件式寻找出符合条件的数据放入RS对象变量内。 Tblname参数代表数据表名称,则通过Execute方法取得该数据表的所有记录,放入RS对象变量中,同时产生一个记录指针指到该数据表的第一笔记录。所以一个Recordset对象代表全部记录。,Recordset常用的属性和方法,Recordset常用的属性和方法,操作:显示“data/d
6、b1.mdb”中stock数据表中所有记录,见下图所示。,其程序如下:“&rs(i).name next,do while not rs.eofresponse.write“for i=0 to rs.fields.count-1response.Write “&rs(i)&“nextresponse.Write“rs.movenext loop rs.close conn.close %,4-4 如何查询、新增及删除数据,如何查询数据 语法:Select fieldname1,fieldname2,fieldnameN From tblname Where condition Order B
7、y fieldname Desc 功能:根据条件式来进行查询或排序。,操作:制作一个表单可以输入数据,藉由输入的数据来查询stock数据表符合A_Name字段的数据,如下图所示。,查询结果:,其程序如下:请输入欲查询的股票名称:没有输入股票名称,请重新输入!“response.End end if,set conn=server.CreateObject(“adodb.connection“) dbpath=server.MapPath(“data/db1.mdb“) conn.open “driver=microsoft access driver (*.mdb);dbq=“&dbpath
8、sqlcmd=“select * from stock where A_Name=“&name&“ set rs=conn.execute(SQLcmd) if rs.eof then response.write“找不到这个股票,请重新输入股票名称“ else %,“&rs(i).name next do while not rs.eofresponse.write“for i=0 to rs.fields.count-1response.Write “&rs(i)&“nextresponse.Write“rs.movenext loop rs.close conn.close end if
9、 %,此例中sqlcmd=“select * from stock where A_Name=”&name&“”这一句有很多的单引号和双引号,是因为在VBScript中会将数据视为变量名称,所以我们要使用双引号将SQL命令转成字符串,然后再将SQL命令交由Execute执行,而单引号括住的数据将被SQL命令视为字符串。未被单引号包括住的数据将被视为数字。譬如:若执行request(“txtname”) 得到王小明(字符串),则select转换过程如下: “select * from stock where A_Name =”&name&“” “select * from stock where
10、 A_Name =”&”王小明”&“” “select * from stock where A_Name=王小明”,在上例中,如果在文本框里输入“JackStock”,然后点击查询按钮,会出现如下图所示的错误。,原因就在“JackStock”字符串中加了一个单引号。SQL会将单引号括住的数据视为字符串,而双引号括住的数据则被VBScript视为字符串,譬如下列SQL命令: “select * from stock where A_Name =”&JackStock &“”经过VBScript解释后会变成下列情形: select * from stock where A_Name =JackS
11、tock 这个SQL命令交给Execute方法执行时,会将Jack视为字符串,而Stock的数据因为少了一个单引号被视为变量而发生错误。这种情况该如何解决呢?在SQL中将连续两个单引号“”视为一个单引号,而VBScript则将连续两个双引号“”视为一个双引号,所以我们可以用replace函数将字符串中的一个单引号取代为两个单引号,修改程序中的一个语句即可(见下图): name=replace(request(“txtname“),“,“),修改过后的结果:,操作:制作一个可以输入账号与密码的表单,当密码与账号符合时,则连接“data/db1.mdb”数据库,打开欢迎页面;否则,输出“sorry
12、!您不是本站会员!所以不能进入本系统!”错误提示信息。如下四图所示。,表单程序是: 请输入您的账号与密码账号: 密码:,Asp程序如下: “response.write“密码、账号等数据未填写!“response.write“返回上一页“response.end end if,if check=false thenresponse.write“response.write“您输入的密码数据类型不正确!“response.write“返回上一页“response.end end if set conn=server.CreateObject(“adodb.connection“) dbpath=
13、server.MapPath(“data/db1.mdb“) conn.open “driver=microsoft access driver (*.mdb);dbq=“&dbpath sqlcmd=“select * from pass where A_ID=“&id&“and A_Pass=“&pw&“,set rs=conn.execute(sqlcmd) if rs.eof thenresponse.write“response.write“Sorry,您不是本站会员!“response.write“所以不能进入本系统!“response.end elseresponse.redir
14、ect “wdl.htm“ end if %,操作:试将股票数据表中成交量大于3000手的数据输出,并依据收盘价由大到小排序,如下图所示。,其程序如下: 3000 order by a_end desc“ set rs=conn.execute(sqlcmd) %编号 股票编号,股票名称 开盘价格 收盘价格 最高价格 最低价格 成交数量 “for i=0 to rs.fields.count-1response.Write “&rs(i)&“nextresponse.Write“rs.movenext loop rs.close conn.close %,如何新增一笔数据,语法:Insert
15、Into tblname(fieldname1,fieldname2,fieldnameN)Values(data1,data2,dataN) 功能:新增一笔数据到服务器端的数据库。 操作:制作一个表单,并试着新增一笔数据到股票数据表中,如下图所示。,其程序如下: % if request(“btnsubmit“)=“新增数据“thenstid=request(“txtid“)stname=replace(request(“txtname“),“,“)stbegin=request(“txtbegin“)stend=request(“txtend“)sthigh=request(“txthig
16、h“)stlow=request(“txtlow“)stmount=request(“txtmount“) set conn=server.CreateObject(“adodb.connection“) dbpath=server.MapPath(“data/db1.mdb“),conn.open “driver=microsoft access driver (*.mdb);dbq=“&dbpath sqlcmd=“insert into stock(a_stockid,a_name,a_begin,a_end,a_high,a_low,a_amount)values(“ sqlcmd=s
17、qlcmd&stid&“,“&stname&“,“&stbegin&“,“&stend&“,“&sthigh&“,“&stlow&“,“&stmount&“)“ set rs=conn.execute(sqlcmd) conn.close end if %, 股票编号: 股票名称: 开盘: 收盘: 最高: 最低: 成交:,如何删除数据,语法:Delete From tblname Where condition 功能:根据所设定Where条件式,删除指定数据表中的某一笔数据。 操作:设计一个可以删除数据的程序,如下图所示。,输入欲删除的股票代号然后“确定”:,可以看到代号为jxsq的股票已经被
18、删除了。,其程序如下: ,股票编号:,如何修改数据,语法:UpDate tblname Set field1=data1, field2=data2,fieldN=dataN Where condition 功能:根据Where子句所设定的条件式,修改指定字段的数据。 操作:将原来可新增数据的程序修改成可依据股票账号来修改数据的网页,如下图所示。,输入欲修改的股票信息,然后点击“修改数据”按钮。,修改后的情形:,其代码是: % if request(“btnUpDate“)=“修改数据“thenstid=request(“txtid“)stname=replace(request(“txtna
19、me“),“,“)stbegin=request(“txtbegin“)stend=request(“txtend“)sthigh=request(“txthigh“)stlow=request(“txtlow“)stmount=request(“txtmount“) set conn=server.CreateObject(“adodb.connection“) dbpath=server.MapPath(“data/db1.mdb“),conn.open “driver=microsoft access driver (*.mdb);dbq=“&dbpath sqlcmd=“update stock set a_name=“&stname&“,a_begin=“&stbegin&“,a_end=“&stend&“,a_high=“&sthigh&“,“ sqlcmd=sqlcmd&“a_low=“&stlow&“,a_amount=“&stmount&“ where a_stockid=“&stid&“ conn.execute sqlcmd conn.close end if %,股票编号: 股票名称: 开盘: 收盘: 最高: 最低: 成交:,