ASP连接读写ACCESS数据库实例(转)
(一) 数据库的选择:
有许多的数据库你可以选择,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储数据的功能。那么到底选择什么数据库最合适呢?其中SQLSERVER是服务器级的,足以应付每天上万次的访问量。对于非服务器级的数据库建议使用ACCESS97。
因为: 本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。 (二)例子:我们建立一个“客户”数据库,需要保存如下的客户资料:客户名称、联络人姓名、所在城市、电话号码。 (1)首先建立ACCESS数据库customer.mdb(今后有用的)。 (2)建立递交表单add.htm: <html> 这与普通的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 ="" Then
Response.Write"<html><body><center><font size=5>请将资料填写完整。</font></center></body></html>"
'Response.Redirect"error.htm"
Response.End
End If
这里是检测各个项目是否输入了东西,如果为空则不往下继续执行,显示错误信息。注意:你可以使用两种方法。我都列出了。
方法一:使用Response.Write方法写一个出错页面,类似于Javascripts的document.write写法,只是ASP使用Response.write罢了。
方法二:使用Response.Redirect方法导向出错页面error.htm。我在方法一的代码前加上单引号表示注释。('ASP中表示注释用单引号')。
<%
setdbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath =Server.MapPath("customer.mdb")
dbconnection.Open"driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>
程序解释:
(1)建立Connection对象:dbconnection,建立一个连接(Connection)是数据库存取的开始。我们使用ASP的内建对象方法Server.Createobject建立与数据库的连接。ADODB是ASP的数据库存取组件,不必担心只要有ASP就有它了,是内置的。
(2)使用dbconnection.open方法打开数据库customer.mdb。driver参数语法: driver={Microsoft Access Driver (*.mdb)}必须这么写。告诉系统使用ACCESS ODBC驱动处理。dbq参数用来指定打开的数据库文件,它必须是完整的路径。例如"c:\inetpub\wwwroot\customer\customer.mdb",我们使用Server.MapPath的方法取得数据库的完整路径。
<%
Set rs =Server.CreateObject("ADODB.Recordset")
%>
建立Recordset对象rs。Connection仅仅是建立了与数据库间的连接,要存取数据还应该再建立Recordset对象。
rs.Open "客户", dbconnection,adOpenDynamic, 3
打开数据库中的表"客户"(客户是表名)。 语法:
rs.open 数据表名或SQL指令,已经建立的Connection对象(这里是dbconnection), 锁定类型
<%
rs.AddNew
rs("公司名称") =CompanyName
rs("联络人姓名") = CName
rs("所在城市") = City
rs("电话号码") = Tel
rs.Update
%>
用AddNew向数据库请求添加数据。最后用Update写入。注意:等号右侧的变量保存着用Request取得的表单数据。双引号内的就是数据库的字段,应该与数据库的一致啊。否则会出错的。这样变量内的数据就写入了数据库对应的字段内了。
Response.Write"<html><body><center><font size=5>祝贺,您的数据已经添加进数据库了!<p>"
Response.Write"<a href='viewdatabase.asp'>查看数据</a>"
Response.Write"</font></center></body></html>"
'写入成功后显示祝贺信息并建立查看数据库记录的连接。
%>
(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。
<html>
<body>
<FONTSIZE="5"><center>数据库记录</center></FONT>
<CENTER>
<TABLE BORDER=1>
<tr>
<td>编号</td>
<td>公司名称</td>
<td>联络人姓名</td>
<td>所在城市</td>
<td>电话号码</td>
</tr>
<% DO WHILE NOTCustomerList.EOF %>
'检测记录是否到了最后一条。EOF表示End of File。
<TR>
<TD><%=CustomerList("客户编号") %></TD>
<TD><%=CustomerList("公司名称") %></TD>
<TD><% =CustomerList("联络人姓名")%></TD>
<TD><%=CustomerList("所在城市") %></TD>
<TD><%=CustomerList("电话号码") %></TD>
</TR>
<%=CustomerList("客户编号") %>可以说是Response.Write方法的简写。将"客户编号"字段内的数据写入TD标签间。
<%
CustomerList.movenext
loop
%>
如果还没有到最后一条则指针移动到下一条。用Do While ... Loop循环逐一取得所有的记录。
</TABLE>
</CENTER>
<center>
<inputtype="button" onclick="javascript:location.href='add.htm'"value="添加数据">
</center>
</BODY>
</HTML>
RS.OPEN SQL,CONN,A,B
A:
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
%><tr>
<td><%=rs("name")%></td>
<td><%=rs("tel")%></td>
<td><%=rs("time")%></td>
</tr>
<%
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
%>
ASP连接读写ACCESS数据库实例(转)的更多相关文章
- C#读写Access数据库、表格datagridview窗体显示代码实例
C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...
- win7 64位系统下读写access数据库以及安装了office32位软件再安装64位odbc的方法
公司一款软件还在读写access数据库. 问题是我的电脑是win7 64位, 运行程序会报错, 出错信息很明显, 大意是ODBC数据源读写出错. 因此,我需要下载Access ODBC 64位数据源 ...
- asp.net mvc access数据库操作
连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...
- ASP连接11种数据库的常用语法
1.Access数据库的DSN-less连接方法: 以下为引用的内容: set adocon=Server.Createobject("adodb.connection") ado ...
- 在查询用户的权限的时候 使用左外连接 和 access数据库中左外连接
一般做视图最好是做成左外连接的.而其作用尤其在我们查询用户当前的权限时尤为明显,我们将 权限表即模块表放→角色权限表→角色表→用户角色表→用户表 就这样left outer join 连接起来,这样就 ...
- JDBC连接自定义sqlserver数据库实例名(多个实例)
java语言中,通过jdbc访问sqlserver2005(2008)数据库默认实例可以按常用的写法来写url连接.代码如下: <span style="font-size:12px; ...
- Java 连接MS Access数据库
java连接MS Access的两种方式: 1.JDBC-ODBC Java连接Access可以使用MS自带的管理工具-->数据源(ODBC)设置建立连接,这样就不需要导入jar.但是,如此一来 ...
- .Net Webconfig连接字符串中数据库实例名带'\'的问题
获取前: 获取后: 导致sa登录失败的问题 string strCon = "workstation id=localhost;packet size=4096;user id=" ...
- 连接SQL SERVER数据库实例出错
问题背景: 刚买的新电脑,昨天让公司IT部装了win10专业版系统,想体验一下.装完后一切正常,晚上带回家装自己需要的软件和系统更新,结果今天来公司发现数据库实例连不上了,拿到IT部,他们也没有找到原 ...
随机推荐
- 洛谷U14667 肝活动【比赛】 【状压dp】
题目描述 Yume 最近在玩一个名为<LoveLive! School idol festival>的音乐游戏.他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好 ...
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- bzip2 --安装
下载源文件安装包: http://www.bzip.org/downloads.html 解压: tar -xzvf bzip2-1.0.6.tar.gz 进入解压后的目录: cd bzip2-1.0 ...
- scala(三)
一.面向对象编程——类 1.定义一个简单的类 class HelloWorld { private var name = "leo" def sayHello() { print( ...
- NYOJ--139
原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=139 分析:cantor展开,康托展开用于计算一个排列的序数.公式为: X=a[n]*n! ...
- 折腾到死:matlab7.0 安装
matlab7.0应该是2004年的东西了吧,装起来相当费劲!为什么不用更高的版本呢?其实我也想,之前安装的2013a安装包就5个多G,安装完之后就十多个G了.我习惯将软件安装到C盘,可怜我那100G ...
- bzoj 2795 [Poi2012]A Horrible Poem hash+数论
2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 640 Solved: 322[Subm ...
- C语言基本类型的字节数
- Android Studio获取调试版SHA1和发布版SHA1的方法
前言: 当我们在集成高德地图定位功能到项目中的时候,需要用到发布版和调试版的安全码SHA1,所以今天我就来总结一下分别在Windows和Mac下是怎么来获取SHA1的,希望对大家有所帮助. 首先,统一 ...
- HDU 1695 容斥
又是求gcd=k的题,稍微有点不同的是,(i,j)有偏序关系,直接分块好像会出现问题,还好数据规模很小,直接暴力求就行了. /** @Date : 2017-09-15 18:21:35 * @Fil ...