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 条新记录了,如下图:
更新记录
更新记录仅仅需要将记录集的指针移动到相应的位置,而后是更新记录,最后调用 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 发现第一条和最后一条记录已经被修改了,查询结果如下:
删除记录
删除语句则是将记录集指针要移动到相应位置后,直接调用 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 中产品表删除前后的对比结果如下:
Open 方法的常用参数
在上面的代码中,我们已经看到 Recordset 对象在使用 Open 方法时传了几个参数,如下代码:
- oRs.Open sql, oConn, 1, 3
其中 sql 和 oConn 两个含义我们已经知道了,分别是打开记录集所使用的 SQL 语句和数据库连接对象。后面的 1 和 3 是什么意思呢?
我们先看看 Recordset 对象的 Open 方法定义:
Recordset.Open Source, ActiveConnection, CursorType, LockType, Options
游标类型(CursorType)指定了记录集中游标指针的移动方法,它的可选值在 adovbs.inc 文件中有记录,该文件你可以在你的 C:\Program Files\Common Files\System\ado 这个位置找到该文件。如下:
- <%
- '---- 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 时,当前记录指针指向第一个记录,同时 BOF 和 EOF 属性都是 False。如果没有记录则 BOF 和 EOF 属性都是 True。
示例代码下载
ASP入门(二十三)- 数据库插入、更新和删除操作的更多相关文章
- MySQL入门很简单: 9 插入 更新与删除数据
1. 插入数据:INSERT 1)为表的所有字段插入数据 第一种: 不指定具体的字段名 INSERT INTO 表名 VALUES(值1,值2,...,值n): 第二种:INSERT语句中列出所有字段 ...
- Mybatis入门教程之新增、更新、删除功能_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 上一节说了Mybatis的框架搭建和简单查询,这次我们来说一说用Mybatis进行基本的增删改操作: 一. 插入一条数据 ...
- Entity Framework 6 Recipes 2nd Edition(10-10)译 - > 为TPH继承的插入、更新、删除操作映射到存储过程
10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product ...
- ASP.NET网页动态添加、更新或删除数据行
ASP.NET网页动态添加.更新或删除数据行 看过此篇<ASP.NET网页动态添加数据行> http://www.cnblogs.com/insus/p/3247935.html的网友,也 ...
- MongoDB数据库中更新与删除数据
MongoDB数据库中更新与删除数据 在MongoDB数据库中,可以使用Collection对象的update方法更新集合中的数据文档.使用方法如下所示: collection.update(sele ...
- SQL.Cookbook 读书笔记4 插入更新和删除
第四章 插入更新和删除 4.1 插入数据 ,'PROGRA','NEW YOURK'); 4.2 从一个表向另一个表中复制 insert into dept_east(deptno,dname,loc ...
- C#中往数据库插入/更新时候关于NUll空值的处理
本文转载:http://blog.csdn.net/chybaby/article/details/2338943 本文转载:http://www.cnblogs.com/zfanlong1314/a ...
- mysql进阶(二十三)数据库事务四大特性
数据库事务四大特性 原子性.一致性.分离性.持久性 原子性 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行.这种特性称为 ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记
2.5.4 MongoDB -- 更新和删除 整体更新 更新字段 字段操作 数组操作 删除 https://docs.mongodb.com/manual/reference/operator/upd ...
随机推荐
- SW-DP (Serial Wire Debug Port) Analyzer plugin for the Saleae Logic
SW-DP (Serial Wire Debug Port) Analyzer plugin for the Saleae Logic The SW-DP protocol is described ...
- CAS服务器配置
参考文献: http://sucre.blog.51cto.com/1084905/683624 1.安装部署CAS Server 从官网下载CAS Server,今天发现CAS Server的官网居 ...
- 解决oracle语句中 含数字的字符串按数字排序问题
普通排序利用:order by 字段名 ASC 但是遇到有中文而且类型是varchar类型的结果就是这样 政采代(甲)字第0298号 政采代(甲)字第0421号 政采代(甲)字第1098号 政采代(甲 ...
- perl解析xml-XML::Simple/XMLin
转自: http://blog.charlee.li/perl-xml-simple/ [Perl]用XML::Simple解析XML文件 在Perl中解析XML的方法最常见的就是使用 XML::DO ...
- Weekly linux and ConferenceByYear(2002-now)
https://lwn.net/Archives/ https://lwn.net/Archives/ConferenceByYear/
- Unity3D脚本(MonoBehaviour)生命周期
场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script ...
- Matlab 7.1安装及打不开问题解决
一.安装方法 1.解压[MATLAB.V7.1.Windows版本号].MATLAB.V7.1.R14.SP3.CD1.iso,双击setup进行安装,输入username,单位,找到crac ...
- CTreeCtrl和CListCtrl失去焦点时高亮选中项
设置CTreeCtrl的Always Show Selection:TrueCListCtrl的Always Show Selection:False在NM_CUSTOMDRAW事件中添加如下代码: ...
- vuex 基础:教程和说明
作者注:[2016.11 更新]这篇文章是基于一个非常旧的 vuex api 版本而写的,代码来自于2015年12月.但是,它仍能针对下面几个问题深入探讨: vuex 为什么重要 vuex 如何工作 ...
- 使用系统自带的 UIRefreshControl 实现下拉刷新
UIRefreshControl 为 UITableViewController 中的一个属性,从以下可以看出, IOS6.0 以上才支持. @property (nonatomic,retain) ...