设为首页
加入收藏
发送稿件
数据库操作详释

数据库操作精髓详释
(假设已建立起了数据库)

000000000000000000000000000000罗 良 富


    没有数据库就没有ASP 。可以说,ASP 其实就是在HTML中插入数据库操作代码,再将文件保存为xx.asp而已,因此,学习ASP的重点在数据库的操作,而ASP的语法和其它语言的语法基本上是差不多的,只要懂得QB就已经能够对付。数据库的基本操作有:

数据库连接  数据读取  数据添加  数据修改  数据删除  分页显示  SQL查询示例


    一,数据库的连接

要点:
    数据库操作只能通过“对象”来进行。
    连接对象 Connection,操作对象 Recordset



<%

ASP代码起始标记。

DIM  conn,Rs 定义变量,也可不定义,提倡定义以保持良好风格。

Set conn = Server.CreateObject("ADODB.Connection")
创建数据库连接对象 Connection。

conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\XX\XX\user.mdb")

打开数据库连接。以上代码普遍有效,只须更改数据库路径和名称。(还有一种方式效果相同)



Set Rs=server.CreateObject("adodb.recordset") 创建数据库操作对象 recordset。

Function CloseDB
  Rs.close
  Conn.Close
  Set Rs=nothing
  Set Conn=Nothing
End Function

定义关闭函数,顺序不可颠倒。在操作结束时及时用 Call CloseDB 调用执行以关闭数据库,节约资源。

%>

ASP代码结束标记

附加说明
    1,另一种打开数据库连接的形式为:
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\XX\XX\user.mdb")
    2,上述代码后两句,也可在具体应用临时时书写,不放在这里。
    3,将代码单独保存为 conn.asp 文件。以后,在凡涉及数据库操作的程序开头,都用<!--#include file=conn.asp-->将其包含进来,就可执行相关操作了。这是任何数据库操作程序必须的第一步。

TOP


    二,数据库的读取

要点:
    SQL 查询语句;向浏览器返回信息 Response.write("xxxx")



<!--#include file=conn.asp-->

引进conn对数据库的连接,数据库操作的必须步骤,除非重新照写一遍。

<%

ASP代码起始标记。

SQL="select * from table order by id asc"

SQL 的查询语句,根据需要设定。基本语法如下:Select 字段名(多个字段用逗号间开,全部字段则用通配符“*”) From 表名(多个表用逗号间开) 条件(本句为 id 升序,desc 是降序)

Rs.open sql,conn,1,1

打开数据库查询的方式:仅读取用 1,1,增加用 1,2,删除、修改用 2,3(也可读取外都用 1,3)

Rs.movefirst

将指针移到第一条记录。本例 SQL 中已设置条件,可以不用。实际上数据库一打开指针总是指向第一条记录的。

If rs.eof and rs.bof then
Response.write“没有可以显示的数据”

如果数据指针同时指到记录集的头部和尾部,说明这时候记录集为空

while not rs.eof

判断指针是否到末尾,没有循环读取。

  response.write(rs("name"))

显示数据表table中的name字段

  rs.movenext

将指针移动到下一条记录,相当于其他语言的 NEXT

wend

循环结束

Call CloseDB

调用关闭函数,关闭数据库

%>

ASP代码结束标记

TOP


    三,数据库的添加

要点:
    改变(增加、修改、删除)数据库为使操作直观,最好应用表单( 设定好表单传递的变量 action="  style=xxx",据此执行相应的操作);
    添加数据函数 Rs.addnew,  更新数据库函数 Rs.update
    读出数据:Rs("xxx")
    写入数据:Rs("xxx")=Requset("xxx")----将表单项的值写入数据库相应字段。
    改变数据库,应该设置权限,以保证安全。一般都用 Session 对象,如登陆成功后 Session("PROADMIN")=True,修改完成后将其中的值释放。



<!--#include file=conn.asp-->

引进conn对数据库的连接。

<%

ASP代码起始标记。
SQL="select * from table"
SQL 的查询语句: Select 字段名(全部用 * 号代替) From 表名
Rs.open sql,conn,1,3
打开数据库查询的方式:增加、删除、修改用 1,3

Rs.addnew

新增加一条记录


Rs("xxx1")=request("xxx1")
Rs("xxx2")=Request("xxx2")
Rs("......")=Request("......")
将数据写入相应字段

Rs.update

更新数据库

Response.Write("<script language=javascript> alert(""添加数据成功"");window.location.replace('add.asp');</script>")

弹出添加成功信息框
Response.End()
关闭数据库,用了这句就不再用下句,作用相同。

Call CloseDB

调用关闭函数,关闭数据库

%>

ASP代码结束标记

附加说明
    1,也可设定 Sql="select * from table where (id is null)"
    2,也可将一个特定的值写入相应的字段:Rs("xxx")="xx"
    3,另一种不须 SQL 语句的“插入”方式的写入,字面比较复杂,形式为:
    conn.execute("insert into table (xxx1,xxx2,xxx3) values ('"&Request.Form("xxx1")&"','"&Request.Form("xxx2")&"','"&Request.Form("xxx3")&"')")

TOP


    四,数据库的修改

要点:
    修改和增加原理相同,不同点在于重写指定 ID 号的记录(去掉 addnew 语句)。
    关键是要选准修改的依据(字段=值,本例以 ID 为依据)。
    修改的既可以是一个字段,也可以是全部。
    修改和删除通常使用记录的 ID, 从何而来?来自隐藏表单 <input name="id" type="hidden" value="<%=rs("ID")%>">,值是不需要修改的,作用是传递变量;如果是在其他页面完成操作,则用 <A href="edit_r_gBook.asp  id=<%=rs(" id")%>"> 的形式传递变量 ID。余类推。



<!--#include file=conn.asp-->

引进conn对数据库的连接。

<%

ASP代码起始标记。

id=cint(request("id"))
xxx1=request("xxx1")
xxx2=request("xxx2")
......=request("......")

将表单中的新值先存入变量

sql="select * from table where ID="&id

SQL 查询语句,指定找到 ID=id 那个记录。
Rs.open sql,conn,1,3
打开数据库查询的方式:修改用 1,3


Rs("xxx1")=request("xxx1")
Rs("xxx2")=Request("xxx2")
Rs("......")=Request("......")
将数据写入相应字段

Rs.update

更新数据库

Response.Write("<script language=javascript> alert(""修改数据成功"");window.location.replace('add.asp');</script>")

弹出修改成功信息框
Response.End()
关闭数据库,用了这句就不再用下句,作用相同。

Call CloseDB

调用关闭函数,关闭数据库

%>

ASP代码结束标记

附加说明
    也可用以下形式修改:
       ID=id  
       xxx="xx"  
       sql="update data set xxx='"&xx&"' where ID="&CInt(ID)  
       conn.Execute(sql)
    或用下面删除的更直接的形式。

TOP


    五,数据库的删除

要点:
    删除是删除一个记录,而不是记录中的某一字段;
    关键是要选准删除的依据(字段=值),防止误删。
    SQL 语句中,select 改为 delete。



<!--#include file=conn.asp-->

引进conn对数据库的连接。

<%

ASP代码起始标记。

id=request("id")

确定删除哪个记录

SQL="delete * from table where ID="&id&""

SQL 查询语句,注意 delete 和 where ID="&id&" 的用法。

Rs.open sql,conn,1,3

打开数据库查询的方式

Response.Write("<script language=javascript> alert(""删除数据成功"");window.location.replace('add.asp');</script>")

弹出删除成功信息框
Response.End()
关闭数据库,用了这句就不再用下句,作用相同。

Call CloseDB

调用关闭函数,关闭数据库

%>

ASP代码结束标记

附加说明
    另外的删除方式:
  1,按部就班进行,好理解,删除多个符合条件的记录
    xxx="xx"
    sql="select * from table"
    rs.open SQL,conn,1,3
    while not rs.eof
    if rs.("xxx")=xxx then
      rs.delete
      rs.update
      else
      rs.movenext
    emd if
    wend
    Call CloseDB
  2,不要 SQL 语句,和打开语句
      就一句 conn.execute("delete * from table where ID="&id&"") 即可。

TOP


    六,数据的分页显示

提示:
    分页显示是数据库操作的难点,方法很多,但当数据和同时在线人数都不是很多的时侯,通常采用将数据库中所有符合查询条件的记录一次性的都读入 Recordset ,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性来进行分页处理,实际上是对 Recordset 进行操作:
    BOF 属性:目前指标指到 RecordSet 的第一笔;
    EOF 属性:目前指标指到 RecordSet 的最后一笔;
    Move 方法:移动指标到 RecordSet 中的某一条记录;
    AbsolutePage 属性:设定当前记录的位置是位于哪一页( 绝对页 );
    AbsolutePosition 属性:目前指标在 RecordSet 中的位置;
    PageCount 属性:显示 Recordset 对象包括多少"页"的数据( 页数目 );
    PageSize 属性:显示 Recordset 对象每一页显示的记录数( 页大小 );
    RecordCount 属性:显示 Recordset 对象记录的总数。

    下面示例更改库名、文件名普遍有效



<!--#include file=conn.asp-->

引进conn对数据库的连接。

<%

ASP代码起始标记。

SQL="select * from table order by id desc"

SQL 的查询语句,根据需要设定。desc 是降序)

Rs.open sql,conn,1,1

打开数据库查询的方式。

Rs.movefirst

将指针移到第一条记录。
Rs.pagesize=MaxPerPage
设定每页显示多少条记录。(具体数目在此前定义或从库中读取)

If trim(Request("Page"))<>"" then
  CurrentPage= CLng(request("Page"))
  If CurrentPage> rs.PageCount then
    CurrentPage = rs.PageCount
  End If
Else
  CurrentPage= 1
End If

设定当前页。


IF Rs.bof and Rs.eof then
   Response.write "<p align='center'>数据库中没有记录!</p>"
else

正式开始显示。如果开始即是结束,为空的数据库。
    totalPut=rs.recordcount
    if CurrentPage<>1 then
        if (currentPage-1)_
            *MaxPerPage<totalPut then
            rs.move(currentPage-1)_
            *MaxPerPage
            dim bookmark
            bookmark=rs.bookmark
        end if
    end if
总的记录数。

    if (totalPut mod MaxPerPage)=0 then
        n= totalPut \ MaxPerPage
    else
        n= totalPut \ MaxPerPage + 1
    end if

计算总的页数:n= totalPut \ MaxPerPage。注意,最后一页不管有多少条记录,都要算一页!
%>
ASP代码结束标记

<%
i=0
do while not rs.eof
%>
     <table width="600"_
         border="1" ALIGN="CENTER">
       <tr>
         <td><%=rs("id")%></td>
         <td><%=rs("name")%></td>
         <td><%=rs("riqi")%></td>
       </tr>
       <tr>
         <td COLSPAN="3"_
         align="center"><%=rs("content")_
         %></td>
       </tr>
     </table>
<% '当显示记录大于maxperpage时结束这页
i=i+1
IF i>=MaxPerPage then exit do
rs.movenext
loop
%>

循环显示具体内容。基本是纯 HTML 代码,可以根据具体需要灵活设计显示页面。

<P ALIGN="CENTER">共有<%=rs.recordcount%>条纪录  共有<%=n%>页  此为第
          <%=currentpage%>页
  <%k=currentPage
      if k<>1 then
          response.write "[<b>"+"_
            <a href='page2.asp  page=1'>_
            首页</a></b>] "
          response.write "[<b>"+"_
            <a href='page2.asp  page="+_
            cstr(k-1)+"'>上一页</a></b>] "
      else
          Response.Write "[首页]_
             [上一页]"
      end if
      if k<>n then
          response.write "[<b>"+"_
            <a href='page2.asp  page="+_
            cstr(k+1)+"'>下一页</a></b>] "
          response.write "[<b>"+"_
            <a href='page2.asp  page="+_
            cstr(n)+"'>尾页</a></b>] "
      else
          Response.Write "[下一页]_
             [尾页]"
      end if
  %>
</P>
<%
END IF

这一段代码显示数据库信息和显示页面的信息,可根据需要增减和布局。注意文件名,否则出错。

rs.close
set rs=nothing
%>

关闭数据库

附加说明
    分页显示的方法很多,此是比较简单,容易理解的一种。经过反复测试,运行是正确的,用到别的地方,只需做很小改动。

TOP


    七,SQL 查询示例

提示:
    下面是常见的 SQL 查询,根据基本原理,可衍生出丰富的实例。


  查询实例:
    1.select * from asset,class where asset.sum=class.class_id
     2.select * from asset where name like '%电%' order by id desc
     3.select * from asset where name=''
     4.select * from asset where name<>''
     5.select * from asset where sum is not null
     6.select * from asset where sum is null 'null不等于''
     7.select * from asset where dat>#2001-7-20#
     8.select max(sum) as 最大值,min(sum) as 最小值,sum(sum) as 总和,avg(sum) as 平均值,count(sum) as 记录数,count(*) as 总记录数 from asset
     9.select * from asset where name like '__' '找两个字符的记录
     10.select * from asset where name like '%电%' and name like '%脑%'

  增加,修改,删除实例:
     1.insert into asset(name,sum,dat,pass) values('电器',24,#2001-8-8#,1)
     2.update asset set pass=0 where pass=1
     3.delete from asset where name='电视' and pass=true

  创建,删除,增加字段实例:
     1.CREATE TABLE test (数字 int NOT NULL,文本 text (250),日期 datetime,备注 memo,是否 bit,primary key(数字))
     2.DROP TABLE test '删除表
     3.ALTER TABLE test ADD sum int,tt text (50) '增加字段sum和tt

后记:
    数据库操作其实只有这么简单几种形式,关键在于 SQL 的设置以适应各种情况,以及执行 SQL 的不同形式而已。本学习小结结构不是很严密,但涵盖了包括显示分页在内的几乎全部内容,认真领会已够用矣。直接复制稍加改动亦可实际应用。

TOP


 


oooooooooo家园提示:人自为谱,家自为说,正误自辨,取舍自酌。引用注明作者和出处。 来源:罗氏家园
阅读:10197
日期:2004/7/5

查看评论 】 【 收藏 】 【 打印 】 【 关闭 】 【字体: 】 
上一篇:咱爸咱妈
下一篇:已经没有了。
  >> 相关文章
 
发表评论


        站长提示:这里不是互动留言处!
点  评: 字数0
用户名:  密码:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
家园地址:http://www.luos.org  粤ICP备13039246号-2
家园创建:罗良富   技术支持:AssumeYessure   法律顾问:罗劲松