巧用ADO.NETDbCommandBuilder生成命令

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

渝水ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

为了能够自动生成命令,必须设置 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,而不依赖自动命令生成。

文章标题:巧用ADO.NETDbCommandBuilder生成命令
网站链接:http://www.shufengxianlan.com/qtweb/news44/39494.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联