
主题:ASP操作数据库
ASP操作数据库的一般顺序:
打开数据库->打开SQL记录集->操作数据->关闭记录集->关闭数据库
一 ASP操作数据库
我们今晚的内容,要用到ASP的一个对象server
例如server.createobject("ADODB.Connection") 就是建立一个对象
拿一个列子来说明下
dim ConnStr '[定义变量]
DbName=”data/dvbbs7.mdb”
Db=Server.MapPath(DbName)'[这是取得数据库DbName的物理路径]
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db'[数据库的连接字符串]
Set Conn=Server.CreateObject("ADODB.Connection")'[首先得先建立一个Connection对象]
Conn.open ConnStr'[打开数据库]
这样对象conn就可以使用了
Provider=Microsoft.Jet.OLEDB.4.0表示用的是oledb驱动
打开access数据库虽然还有另外一个ODBC的驱动,但是不建议使用它,它太旧了
Data Source=" & Db这是就是指定access数据库mdb文件的物理路径
一般来说,我们只知道mdb文件相对于当前目录的路径
所以,我们需要利用Db=Server.MapPath(DbName)这个来驱动相对路径DbName的物理路径
例如
dim conn,connstr,dbname,db
Set Conn=Server.CreateObject("ADODB.Connection")
DbName = "data/dvbbs7.mdb"
Db=Server.MapPath(DbName)
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db
Conn.open ConnStr
这就是打开一个access数据库的一般方法
注意:
Data Source=" & Db 物理路径就是,从盘符开始的路径
打开数据库的文件名为conn.asp可以随便更改文件名
Provider=Microsoft.Jet.OLEDB.4.0;Data Source="是规定链接字符串,后面要连一个字符串变量,引号到这里
db是数据库mdb文件的绝对物理路径
Microsoft.Jet.OLEDB.4.0;这个驱动是每个机器都附带的
oledb比odbc大概快100倍 ,同时OLEDB比旧驱动多很多功能
二 数据集操作
数据集用另外一个adodb的对象
Dim Rs,Sql
Set Rs=Server.CreateObject("ADODB.RecordSet")
定义一个变量rs,当然变量名随便你用了这里我定义的是rs 这是创建一个记录集对象
一般习惯用rs相关的,这是网上大家默认的标准了
在数据库的操作中
我们一般是这样操作的打开一个数据库连接对象利用这个连接对象执行SQL,返回一个记录集对象然后,就可以利用这个记录集对象操作数据库了
所以,这一步,我们就是利用连接对象来打开SQL记录集
Sql="Select * from [admin]"
Rs.Open Sql,conn,1,1
这两行一是赋值一个SQL语句二是打开这个SQL语句的记录集
记录集对象rs的open方法有四个参数:
第一是SQL字符串,二是Connection链接对象(必须是已经打开的) 三四是1,1
先记住是1,1不要问为什么,你记住是这个就行,不要看书上的,书上的说得太复杂了
Sql="Select * from [Dv_admin]"这个就是SQL语句,引号里面的意思是,读取表Dv_admin中的所有记录(就是一条条数据)
至此,到OPEN这里
if not rs.eof then
response.write rs("username")
end if
我们可以这样来读取数据库里面的数据了
rs.eof就是利用记录集的eof属性,判断是否返回了数据也就是说,即使你用了rs.open
可能并没有得到任何数据,因为数据库里面可能根本就没有数据
所以要用eof判断eof为真,表明没有数据
我们这里 not rs.eof表明有数据的时候才执行里面的语句
response.write rs("username")这是显示语句显示rs("username")
rs("username")就是读取rs记录集中,username字段的数据
所以,整个程序是:
<%
dim conn,connstr,dbname,db
Set Conn=Server.CreateObject("ADODB.Connection")
DbName = "dvbbs7.mdb"
Db=Server.MapPath(DbName)
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db
Conn.open ConnStr
Dim Rs,Sql
Set Rs=Server.CreateObject("ADODB.RecordSet")
Sql="Select * from [Dv_admin]"
Rs.Open Sql,conn,1,1
if not rs.eof then
response.write rs("username")
end if
%>
意思就是,读取并显示数据库dvbbs7.mdb中,表Dv_admin中,username字段的数据
注意:
Sql="Select * from [admin]" *表示读取所有字段的数据
open三四参数:1,1读 1,3更新
一般来说,不可以用关键字做表名但是,有时候又不记得是不是关键字
所以加[] 加了[]就不怕一些关键字了
rs只是很多程序员的默认的习惯而已,只要你也这样用,大家一看就知道是记录集对象,
程序易读性非常强
RS是RECORDSET的宿写
我们换一个比较直观的数据表
Sql="Select * from [Dv_User]"
Rs.Open Sql,conn,1,1
我们这次打开Dv_User表
这个表数据多一点先给大家看看数据
显示的是nnhy得去得到的是第一条记录数据
说到记录集,的确是一个很"专业"的名词我们就说是一个表吧,其实,一个表也是一个记录集
Sql="Select * from [Dv_User]"
Rs.Open Sql,conn,1,1
这个Sql语句,得到的记录集(记录集由Sql语句决定)
其实就是整个Dv_User表我们再改改
Sql="Select username from [Dv_User]"
这样就是只得到UserName这个字段的数据
这个Sql的记录集也是一个表,这个表只有一个数据字段,就是UserName
里面有很多数据,就是从Dv_User中的UserName字段来了
这图片,左边的就是这个记录集的数据
右边的就是Dv_User表中的数据大家可以对比看看有什么不同
右边的表我只截取了一部分而已右边的表有很多字段而左边的只有username一个
select username的意思就是只选择username字段的数据
但是,我们刷新访问conn.asp就会发现,怎么还是只显示nnhy一个呢
这里涉及一个当前记录的问题
大家可以看到,左边的username有很多记录 每一行就是一条记录
我们打开记录集的时候,第一条记录将会作为当前记录
所以我们response.write rs("username")的时候
得到的只是第一条记录的username字段的数据nnhy
我们只需要想办法把记录下移,就可以读取下面的数据了现在我改一下程序
Sql="Select username from [Dv_User]"
Rs.Open Sql,conn,1,1
while not rs.eof
response.write rs("username")
rs.movenext
wend
用了一个while循环
rs.movenext的作用,正是把记录指针往下面移动
rs.eof其实就是判断,指针是不是已经到了(最后一条记录)的后面,要是到了,那么就表明后面没有数据啦,不用继续读取啦要是没到not rs.eof,就继续读取
现在看看运行效果
这些就是NewLife论坛的所有用户名
为什么那么乱呢因为我们仅仅是response.write rs("username")直接输出而已没有做格式的变换
下面再改一下程序,让它们分开
response.write rs("username") & "
"加了br
是HTML标记 就是换行的意思下面看看效果
很好,完全按照我们的要求来显示了
整个程序是
<%
dim conn,connstr,dbname,db
Set Conn=Server.CreateObject("ADODB.Connection")
DbName = "dvbbs7.mdb"
Db=Server.MapPath(DbName)
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Db
Conn.open ConnStr
Dim Rs,Sql
Set Rs=Server.CreateObject("ADODB.RecordSet")
Sql="Select username from [Dv_User]"
Rs.Open Sql,conn,1,1
while not rs.eof
response.write rs("username") & "
"
rs.movenext
wend
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
就是这样子
注意:
先set再open 先close再set nothing
open对应close
conn是关闭连接,还可以conn.open重新打开
关闭数据库是为了节省资源,同时也是为了释放对数据库文件的锁定
下面是一个比较复杂的SQL语句,不再详细讲了,大家自己下载前面的SQL教程看看吧
主要看select语句,还有delect和insert into和update set这几个,别的很少用
select username from [Dv_User] where UserName='nnhy' 这个SQL
