ASP连接读写ACCESS数据库实例(转)
(一) 数据库的选择:有许多的数据库你可以选择,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储数据的功能。那么到底选择什么数据库最合适呢?其中SQLSERVER是服务器级的,足以应付每天上万次的访问量。对于非服务器级的数据库建议使用ACCESS97。
因为:(1)只要安装了PWS或IIS4肯定有ACCESS的ODBC驱动,即你的系统肯定支持ACCESS数据库的存取。(2)ACCESS支持的SQL指令非常齐全。(3)ACCESS ODBC驱动程序的效率非常高。虽然它不是服务器级的数据库,但是作为中小型企业内部网的数据库支持还是绰绰有余的。(4)ACCESS97在OFFICE97中就有,非常方便得到和使用。本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。(二)例子:我们建立一个“客户”数据库,需要保存如下的客户资料:客户名称、联络人姓名、所在城市、电话号码。(1)首先建立ACCESS数据库customer.mdb(今后有用的)。 建立如下字段:客户名称、联络人姓名、所在城市、电话号码、客户编号、时间。将表保存为"客户"(今后有用的,===>看看图)。注意:建立字段时多作了2个(客户编号、时间),因为在今后排序时要用到它们。建议今后做数据库时最好都加上这2项,不会没用的。此外,在保存表时ACCESS会询问是否建立一个住关键字,我们不需要它所以不必建立。还有:时间字段的"默认值"设成"now()",即去系统当时的时间。同时将索引项设成"有(允许重复)",含义:WEB上极有可能同时存取数据,所以允许重复,索引设成"有"可以加快排序速度。===>看看图(2)建立递交表单add.htm:源代码如下:
添加数据库记录
这与普通的HTML没有任何区别,关键部分已经用红色标记了。递交方法用POST,递交后处理的程序是adddatabase.asp(下一步就重点讨论它)。(3)关键部分:建立与数据库的联系并将表单中收集到的信息添加到ACCESS数据库中。ASP代码放在〈%和%>之间。adddatabase.asp程序内容:
<%CompanyName =Request("CompanyName")CName =Request("CName")City =Request("City")Tel = Request("Tel")%> 以上,首先取得表单中填写的数据,使用ASP的Request对象非常容易可以实现数据的收集。双引号中的就是上个文件中建立的各个输入框中的名字红色部分(NAME=)。所以今后为每个输入框起名字是个好习惯,尽管有时候并不一定用得到。这样取得的数据就保存在等号坐侧的变量中了。If CompanyName ="" Or CName = "" Or City = "" Or Tel ="" ThenResponse.Write"
<%Set rs =Server.CreateObject("ADODB.Recordset")%>
建立Recordset对象rs。Connection仅仅是建立了与数据库间的连接,要存取数据还应该再建立Recordset对象。rs.Open "客户", dbconnection,adOpenDynamic, 3打开数据库中的表"客户"(客户是表名)。 语法:rs.open 数据表名或SQL指令,已经建立的Connection对象(这里是dbconnection), 锁定类型<%rs.AddNewrs("公司名称") =CompanyNamers("联络人姓名") = CNamers("所在城市") = Cityrs("电话号码") = Telrs.Update%>用AddNew向数据库请求添加数据。最后用Update写入。注意:等号右侧的变量保存着用Request取得的表单数据。双引号内的就是数据库的字段,应该与数据库的一致啊。否则会出错的。这样变量内的数据就写入了数据库对应的字段内了。Response.Write"
"Response.Write"查看数据"Response.Write"
(4)显示/查看数据库记录:<%setdbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")DBPath =Server.MapPath("customer.mdb")dbconnection.Open"driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath'建立与数据库的连接,与上同。SQL="select * from 客户 Order By 时间 DESC"SETCustomerList=dbconnection.EXECUTE(SQL)%> 建立SQL查询语句,表示从"客户"表中查询所有记录,Order By 时间 DESC表示"按时间降序排序,"这样最后添加的信息再最上面显示。下面一句执行SQL查询并将结果返回给Recordset对象CustomerList。
| 编号 | 公司名称 | 联络人姓名 | 所在城市 | 电话号码 |
| <%=CustomerList("客户编号") %> | <%=CustomerList("公司名称") %> | <% =CustomerList("联络人姓名")%> | <%=CustomerList("所在城市") %> | <%=CustomerList("电话号码") %> |
RS.OPEN SQL,CONN,A,BA: ADOPENFORWARDONLY(=0) 只读,且当前数据记录只能向下移动ADOPENKEYSET(=1) 只读,当前数据记录可自由移动ADOPENDYNAMIC(=2) 可读写,当前数据记录可自由移动ADOPENSTATIC(=3) 可读写,当前数据记录可自由移动,可看到新增记录B:ADLOCKREADONLY(=1) 缺省锁定类型,记录集是只读的,不能修改记录ADLOCKPESSIMISTIC(=2) 悲观锁定,当修改记录时,数据提供者将尝试锁定记录以确保成功地编辑记录。只要编辑一开始,则立即锁住记录。ADLOCKOPTIMISTIC(=3) 乐观锁定 ,直到用Update方法提交更新记录时才锁定记录。ADLOCKBATCHOPTIMISTIC(=4) 批量乐观锁定,允许修改多个记录,只有调用UpdateBatch方法后才锁定记录。当不需要改动任何记录时,应该使用只读的记录集,这样提供者不用做任何检测。对于一般的使用,乐观的锁定可能是最好的选择,因为记录只被锁定一小段时间,数据在这段时间被更新。这减少了资源的使用。===========================================================
数据库连接:
<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("数据库名")
%>
打开数据库:
exec="select * from 数据库表"
setrs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
参数1,1为读取
读取内容格式:<%=rs("字段")%>
添加记录处理程序:
<%
setconn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("数据库名")
name=request.form("字段") name,tel,message为提交表单所设置的字段值
tel=request.form("字段")
message=request.form("字段")
exec="insert into 表名(字段)values('"+字段+"')"多个用逗号隔开
conn.execute exec 使用execute提交
conn.close
set conn=nothing
%>
搜索处理程序:
<%
name=request.form("字段") name,tel为提交表单所设置的字段值
tel=request.form("字段")
setconn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("数据库名")
exec="select * from 表 where name='"+字段+"' and tel="+字段
setrs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
%>
'页面搜索到的内容导出来
<%
do while not rs.eof
%>
<%
rs.movenext
loop
%>
删除记录处理程序:
<%
setconn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("数据库名")
exec="delete * from 表名 where 编号="&request.form("id")
conn.execute exec
%>
修改记录处理程序:
<%
setconn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("数据库名")
exec="select * from 表名 where 编号="&request.form("id")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,3 '1,3为修改意思
rs("name")=request.form("字段") 'name,tel,message为提交表单所设置的字段值
rs("tel")=request.form("字段")
rs("message")=request.form("字段")
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
修改记录执行程序:输入ID号页面>>>导出相对应ID数据>>>>>>直接修改的处理程序
后台登陆处理程序例子:
<%
dim name,password
name=request.form("name")
password=request.form("password")
dim exec,conn,rs
exec="select *from 表名 where(name='"&字段&"' and password='"&字段&"')"
setconn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("数据库名")
setrs=server.createobject("adodb.recordset")
rs.open exec,conn
if not rs.eof then
rs.Close
conn.Close
session("checked")="yes"
session("check")="right"
response.Redirect "index.asp"
else
session("checked")="no"
session("check")="wrong"
response.Redirect "login.asp"
end if
%>
每个后台页面加上:
<%if notsession("checked")="yes" then 'session里面定义一个checked字符串变量
response.Redirect "login.asp"
else
%>