ADO.NET入门 5

  5.更新数据
    Web程序通常利用无程式语句或者通过参数代存储过程来更新数据.但是,当遇见脱
线的数据时,你也许希望利用内置服务来更新所有需要修订的记录.为完成这一工作.ADO
提供了成批的更新机制.
    UpdateBatch 方法用于把保存在副本缓冲中的 Recordset 更改发送到服务器,以
更新数据源。它采用开放式锁定,允许所有挂起的本地更改。它还在单个操作中把所有
更改传送到数据源。仅当更改提交后数据源锁定要更改的记录时,才会出现开放式锁定
。开放式锁定使两个用户可以同时访问同一个记录,但一个用户输入的更改很快会被另
一用户所覆盖。当然,这种方式要求数据源能够检测和防止数据冲突。还要求整个数据
源比较稳定,不会发生频繁的更改。否则,不难想象协调费用将很快超过替代严格锁定
所带来的节约。事实上,使用 UpdateBatch 方法,在任何更改失败时都会返回一个错误
。然后,您可以通过 Errors 集合和 Error 对象来访问该错误。
    要理解 ADO.NET 模型为什么是更新数据的更强大的工具,理解 ADO 中开放式锁
定的工作原理是非常关键的。在 ADO 代码中,您无法控制调用 UpdateBatch 之后所发
生的一切。也就是说,更新是在服务器上通过滚动已更改的行,然后比较原始值和数据源
中对应记录中的当前值来进行的。当所有的值都一致了,才对表执行适当的 SQL 语句(
INSERT、UPDATE 或 DELETE)。
    以上陈述说明了你还不能够控制SQL 语句。位于服务器端的更新 代码既不会比你
自己写的好,也不会在你采用的非SQL 提供程序的情况下运作。在本章节的开始部份,
我已经讲了Web应用程序是典型的通过参数化存储进程来更新数据的过程。不管如何,如
果你用批更新,情况就会有所不同.
    在ADO.NET中, 模型已被扩展开来.现在,它采用更为通用的架构,通过它你可以规
定你自己关于基本运算的命令语句,如插入,删除,更新以及选择. 更明显的,你可以观察
到从数据源里提取数据的企图,并且不管数据源的本性,可以提供相同的支持.ADO.NET中
的批更新,要求你创建一个DataSetCommand 对象: SQLDataSetCommand 或者ADODataSet
Command
    注: 在Beta 2中, DataSetCommand对象被称为DataAdapter 对象.
    一旦你采用了DataSetCommand对象,你可以使用它的Update 方法. DataSetComma
nd提供了一系列属性:如InsertCommand, DeleteCommand, UpdateCommand, and Select
Command.它们都是Command对象,但你不能够对它们进行设置,除非缺省设置没有按你的要
求完成.这与ADO中一样.在Update过程中,如果没有设置xxxCommand属性,但是主关键字已
经存在内,则会自动生成Command对象.
    以下代码展示了如何为EmployeesList table设置主关键字,
  DataColumn[] keys = new DataColumn[1];
  keys[0] = m_oDS.Tables["EmployeesList"].Columns["EmployeeID"];
  m_oDS.Tables["EmployeesList"].PrimaryKey = keys;
    主关键字基本上是是DataColumn对象的一个数组.
    如果你想利用存储过程来更新表单,或者你利用专用非SQL 数据提供程序进行操作
,那么你将会常常用到这 些命令属性.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值