巧用ADO.NET DbCommandBuilder生成命令
创始人
2024-06-11 12:00:59
0

ADO.NET还是比较常用的,于是我研究了一下ADO.NET,在这里拿出来和大家分享一下,希望对大家有用。如果在运行时动态指定 SelectCommand 属性(例如,通过接受用户提供的文本命令的查询工具),那么您可能无法在设计时指定适当的 InsertCommand、UpdateCommand 或 DeleteCommand。 如果您的 DataTable 映射到单个数据库表或者是从单个数据库表中生成的,那么您可以利用 ADO.NET DbCommandBuilder对象来自动生成 DbDataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。

为了能够自动生成命令,必须设置 SelectCommand 属性,这是最低要求。 由 SelectCommand 属性检索的表架构确定自动生成的 INSERT、UPDATE 和 DELETE 语句的语法。

#T#为了返回构造 INSERT、UPDATE 和 DELETE SQL 命令所需的元数据,DbCommandBuilder 必须执行 SelectCommand。 因此,必须额外经历一次到数据源的过程,这可能会降低性能。若要实现最佳性能,请显式指定命令而不是使用 ADO.NET DbCommandBuilder。SelectCommand 还必须至少返回一个主键或唯一列。 如果不存在任何主键和唯一列,则会生成 InvalidOperation 异常,并且不会生成命令。当与 DataAdapter 关联时,ADO.NET DbCommandBuilder会自动生成 DataAdapter 的 InsertCommand、UpdateCommand 和 DeleteCommand 属性(如果它们为空引用)。 如果某个属性已存在 Command,则使用现有 Command。

通过联接两个或更多个表来创建的数据库视图不会被视为单个数据库表。 在这种情况下,您无法使用 DbCommandBuilder 来自动生成命令;必须显式指定命令。 有关显式设置命令以将对 DataSet 的更新解析回数据源的信息,请参见使用 DataAdapter 更新数据源 (ADO.NET)。

您可能需要将输出参数映射回 DataSet 的更新行。 一项常见的任务是从数据源中检索自动生成的标识字段或时间戳的值。 默认情况下,DbCommandBuilder 不会将输出参数映射到更新行中的列。 在这种情况下,必须显式指定命令。 有关将自动生成的标识字段映射回插入行的列的示例,请参见检索标识或 Autonumber 值 (ADO.NET)。

更新和删除的开放式并发模型

为 UPDATE 和 DELETE 语句自动生成命令的逻辑基于“开放式并发” -- 即未锁定记录的编辑功能,其他用户或进程可以随时修改。 由于在从 SELECT 语句中返回某记录之后但在发出 UPDATE 或 DELETE 语句之前,该记录可能已被修改,所以自动生成的 UPDATE 或 DELETE 语句包含一个 WHERE 子句,指定只有在行包含所有原始值并且尚未从数据源中删除时,才会更新该行。 这样做的目的是为了避免覆盖新数据。当自动生成的 UPDATE 命令试图更新已删除或不包含 DataSet 中原始值的行时,该命令不会影响任何记录,并且会引发 DBConcurrencyException。

如果要使 UPDATE 或 DELETE 在不考虑原始值的情况下完成,必须为 DataAdapter 显式设置 UpdateCommand,而不依赖自动命令生成。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...