分享
 
 
 

使用Recordset方法新增及更新资料

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

使用 SQL 指令来新增或更新数据库中的资料是非常方便也是大部分开发者所爱用的方法, 不过当你要进行多笔不同的更新时, SQL 的方法看几来就不是很完美, 今天的文章将介绍另一个选择, 使用 Recordset 方法来新增或更新资料

建立 Recordset

建立 Recordset 你可以使用以下的方法, 在这篇文章中我们将重点放再第三种方法

由查询 (Query) 建立 Recordset 对象

Set oConn = Server.CreateObject("Adodb.Connection")

oConn.Open "你的资料来源名称 DSN"

Set oRs = oConn.Execute("Select * From SomeTable")

藉由使用 Connection 对象的 Execute 方法, Recordset 对象将会被自动建立, 这个方法也就是前面所说的 SQL 指令的方法

由资料表 (Table) 建立 Recordset 对象

Set oConn = Server.CreateObject("Adodb.Connection")

oConn.Open "你的资料来源名称 DSN"

Set oRs = oConn.Execute("SomeTable")

另一种使用 Execute 的方法, 只是把 SQL 指令改为资料表名称, 和第一种方法不同的是他只传回这个资料表的资料而不具备更新资料的能力

直接建立 Recordset 对象

Set oRs = Server.CreateObject("Adodb.Recordset")

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

新增资料

有说有作才是真功夫, 来作实作的例子, 这一次我们将使用北风数据库里的 Categories 资料表, 因为这个资料表最简单, 这个资料表记载产品的类别, 剧情如下, 我们想要新增一笔类别, 你可以这么做

<%

Const adOpenKeyset = 1, adLockPessimistic = 2'ADO 常数的宣告

sConnString = "Provider=SQLOLEDB;" _'在这个例子我们使用 OLEDB Provider

& "Data Source=你的SQL服务器名称;" _

& "Initial Catalog=Northwind;" _

& "User Id=sa;" _

& "Password="

Set oRs = Server.CreateObject("Adodb.Recordset")

oRs.Open "Categories", sConnString, adOpenKeyset, adLockPessimitic

oRs.AddNew'使用 Recordset 的 AddNew 方法来新增资料

oRs("CategoryName") = "测试类别"

oRs("Description") = "这是测试类别说明"

oRs.Update'储存变更

oRs.Close

Set oRs = Nothing

%>

更新资料

现在来看看 Recordset 如何更新资料, 很趣味的是和前面新增的方法比较起来更加简单, 只要把 oRs.AddNew 这一行去掉即可, 哪么是哪一笔资料会被更新呢? 这里我们假设你对 Recordset 浏览的五种方法 (Move, MoveNext,...) 有一定的认识, 按内你大概猜到答案了, 也就是 Cursor 所在的资料会被更新! 来看个例子, 好比说我们想将

<%

Const adOpenKeyset = 1, ...

...... 省略 ......

Set oRs = Server.CreateObject("Adodb.Recordset")

oRs.Open "Categories", sConnString, adOpenKeyset, adLockPessimitic

oRs("CategoryName") = "更新类别"

oRs("Description") = "这是更新类别说明"

oRs.Update

oRs.Close

Set oRs = Nothing

%>

执行的结果你会发现第一笔资料被更新了!

在 Recordset 的新增或更新资料又可以分为两种模式, 立即模式 (Immediate Mode) 和批次模式 (Batch Mode), 在立即模式中每次当你呼叫 Update 数据库会立即作变更, 在前一个例子中的 Recordset 开启, 我们指定了 LockType 属性为 adLockPessimistic , 这代表当你在进行资料更新的时候, Data Provider 会将这些资料锁定以防止同时有其它的使用者更改相同的资料, 这就是立即模式的更新!

相对于立即模式, 当你呼叫 Update 时批次模式下会先将变更存在 ADO 的快取 (Cache), 直到你呼叫 UpdateBatch 方法被呼叫, 数据库才会一次进行所有的变更, 要使用批次模式你必须指定 LockType 属性为 adLockBatchOptimistic , 例如

<%

Const adOpenKeyset = 1, adLockBatchOptimistic = 4

...... 省略 ......

Set oRs = Server.CreateObject("Adodb.Recordset")

oRs.Open "Categories", sConnString, adOpenKeyset, _

adLockBatchOptimistic

......

多笔变更

......

oRs.UpdateBatch

oRs.Close

Set oRs = Nothing

%>

用惯了 SQL 指令的方法, 你可能还不太习惯 Recordset 的做法, 其实方法的选择是依情况而定的, 一般简单的情况用 SQL 的方法是较方便的, 但较进阶的更新例如多个值的更新, 就一定要用 Recordset 的做法! 在以后的文章我们还会再多介绍一些例子!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有