zoukankan      html  css  js  c++  java
  • ASP入门(二十三)- 数据库插入、更新和删除操作

    我们这里介绍如何使用 Recordset 对象进行插入、更新和删除操作,顺便和 SQL 语句对比。

    插入记录

    AddNew 方法用于插入一条记录,首先打开一个记录集,并且这个记录具备可写特性,而后调用 AddNew 方法告诉 ADO 要插入一条记录,而后分别设置各个字段的值,最后调用 Update 方法将插入的记录生效。

    还是直接看具体代码和注释吧(AddNew.asp),如下:

    <!--#include file="../include/conn.asp"-->
    <%
    Dim oRs, sql
    sql = "SELECT * FROM [产品]"
    Set oRs = Server.CreateObject("ADODB.Recordset")
    oRs.Open sql, oConn, 1, 3  '这个3表示可修改
    '调用 AddNew 准备插入记录
    oRs.AddNew()
    oRs("产品名称") = "巧克力面包"
    oRs("供应商ID") = 8
    oRS("类别ID") = 3 
    oRS("单位数量") = "" 
    oRS("单价") = 5
    oRS("库存量") = 150 
    oRS("订购量") = 50 
    oRS("再订购量") = 25
    oRS("中止") = False
    oRs.Update
    oRs.Close
    Set oRs = Nothing
    '/////////////////////////////////////////////////
    'SQL 版本的插入执行
    Dim RA
    sql = "INSERT INTO 产品 ( 产品名称, 供应商ID, 类别ID, 单位数量, 单价, 库存量, 订购量, 再订购量, 中止 ) VALUES ('奶油面包', 8, 3, '个', 3, 200, 50, 25, False)"
    oConn.Execute sql, RA
    If RA <> 0 Then
      Response.Write("插入记录成功")
    End If
    oConn.Close
    Set oConn = Nothing
    %>

    执行后,我们在 Access 中发现已经插入 2 条新记录了,如下图:

    20150824017


    更新记录

    更新记录仅仅需要将记录集的指针移动到相应的位置,而后是更新记录,最后调用 Update 方法进行更新即可。

    还是来看代码和注释吧(UpdateRecord.asp),如下:

    <!--#include file="../include/conn.asp"-->
    <%
    Dim oRs, sql
    sql = "SELECT * FROM [产品]"
    Set oRs = Server.CreateObject("ADODB.Recordset")
    oRs.Open sql, oConn, 1, 3  '这个3表示可修改
    oRs.MoveLast '移动到最后一条记录
    oRs("产品名称") = "我被修改了"
    oRs.Update
    oRs.Close
    Set oRs = Nothing
    '/////////////////////////////////////////////////
    'SQL 版本的更新记录
    Dim RA
    sql = "UPDATE 产品 SET [产品名称]='我被修改了' WHERE [产品ID]=(SELECT MIN([产品ID]) FROM 产品)"
    oConn.Execute sql, RA
    If RA <> 0 Then
      Response.Write("更新记录成功")
    End If
    oConn.Close
    Set oConn = Nothing
    %>

    执行后,我们通过 Access 发现第一条和最后一条记录已经被修改了,查询结果如下:

    20150824018


    删除记录

    删除语句则是将记录集指针要移动到相应位置后,直接调用 Delete 方法,即可。

    具体实现的代码(DeleteRecord.asp)如下:

    <!--#include file="../include/conn.asp"-->
    <%
    Dim oRs, sql
    sql = "SELECT * FROM [产品]"
    Set oRs = Server.CreateObject("ADODB.Recordset")
    oRs.Open sql, oConn, 1, 3  '这个3表示可修改
    oRs.MoveFirst '定位到第一条记录
    oRs.Delete()
    oRs.Update
    oRs.Close
    Set oRs = Nothing
    '/////////////////////////////////////////////////
    'SQL 版本的更新记录
    Dim RA
    sql = "DELETE FROM 产品 WHERE [产品ID]=(SELECT MIN([产品ID]) FROM 产品)"
    oConn.Execute sql, RA
    If RA <> 0 Then
      Response.Write("删除记录成功")
    End If
    oConn.Close
    Set oConn = Nothing
    %>

    执行后,我们通过 Access 查看执行的效果,结果什么也没有删除,原因是其他表“订单明细”中包含了相关记录,不能删除或改变记录。如果要删除需要先删除关系的表中的记录。我们在“关系”视图中将产品表和订单明细表的“编辑关系”对话框中勾选上“级联删除相关记录”选项,这样就能删除了。

    再次执行 ASP 页面代码,Access 中产品表删除前后的对比结果如下:

    20150825001

    20150825002


    Open 方法的常用参数

    在上面的代码中,我们已经看到 Recordset 对象在使用 Open 方法时传了几个参数,如下代码:

    oRs.Open sql, oConn, 1, 3

    其中 sqloConn 两个含义我们已经知道了,分别是打开记录集所使用的 SQL 语句和数据库连接对象。后面的 13 是什么意思呢?

    我们先看看 Recordset 对象的 Open 方法定义:

    Recordset.Open Source, ActiveConnection, CursorType, LockType, Options

    游标类型(CursorType)指定了记录集中游标指针的移动方法,它的可选值在 adovbs.inc 文件中有记录,该文件你可以在你的 C:Program FilesCommon FilesSystemado 这个位置找到该文件。如下:

    <%
    '---- CursorTypeEnum Values ----
    Const adOpenForwardOnly = 0
    Const adOpenKeyset = 1
    Const adOpenDynamic = 2
    Const adOpenStatic = 3
    %>
    • adOpenForwardOnly 使用仅向前的游标。扯了在记录中只能向前滚动外,与静态游标相同。当只需要在 Recordset 中进行一个传递时,用它提高性能。
    • adOpenKeyset 使用键集游标。尽管从您的 Recordset 不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,它和动态游标相似。其他用户所做的数据更改依然能见。
    • adOpenDynamic 使用动态游标,其他用户所做的添加、更改和删除均可见,而且允许 Recordset 中所有移动类型。
    • adOpenStatic 使用静态游标。一组记录的静态副本,可用于查找数据或生成报告。其他用户所做的添加、更改和删除不可见。
    • adOpenUnspecified 不指定游标类型 (-1)。

    锁定类型(LockType)可选参数如下:

    <%
    '---- LockTypeEnum Values ----
    Const adLockReadOnly = 1   
    Const adLockPessimistic = 2
    Const adLockOptimistic = 3
    Const adLockBatchOptimistic = 4
    %>
    • adLockReadOnly Recordset对象以只读方式启动,无法运行增、删、改等操作
    • adLockPessimistic 当数据源正在更新时,系统会锁定其他用户的动作,以保证数据的一致性
    • adLockOptimistic 当数据源正在更新时,系统不会锁定其他用户的动作,其他用户可以对数据进行操作。只有在调用 Update 方法时才锁定记录。
    • adLockBatchOptimistic 当数据源正在更新时,其他用户必须将 CursorLocation 改为 adUdeClientBatch 才能对数据进行增、删、改等操作。

    当您首次打开一个 Recordset 时,当前记录指针指向第一个记录,同时 BOFEOF 属性都是 False。如果没有记录则 BOFEOF 属性都是 True


    示例代码下载

    ADOConn.RAR

  • 相关阅读:
    如何用Map对象创建Set对象
    SpringMVC如何接受POST请求中的json参数
    Eclipse启动的时候提示:Failed to load JavaHL Library.
    spring中的scope详解
    synchronized 与 Lock 的那点事
    (转)Lock和synchronized比较详解
    java事件机制
    linux查看内存占用情况
    Linux命令简写和全称
    人类未来思考
  • 原文地址:https://www.cnblogs.com/pchmonster/p/4756854.html
Copyright © 2011-2022 走看看