DataAdapter执行批量更新的实例代码

使用 DataAdapter 执行数据源批量更新 阅读详情
分享下DataAdapter执行批量更新的实例代码。

在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行。因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改。如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand、InsertCommand 或 DeleteCommand。每一次行更新都涉及网络与数据库之间的双向数据传输。

    在 ADO.NET 2.0 中,DataAdapter 公开了 UpdateBatchSize 属性。将 UpdateBatchSize 设置为正整数值将使对数据库的更新以指定大小的批次进行发送。例如,如果将 UpdateBatchSize 设置为 10,会将 10 个独立的语句组合在一起并作为一批提交。将 UpdateBatchSize 设置为 0 将导致 DataAdapter 使用服务器可以处理的最大批次的大小。如果将其设置为 1,则禁用批量更新,因为此时每次发送一行。

    执行非常大的批次可能会降低性能。因此,在实现应用程序之前,应测试最佳的批次大小设置。

    使用 UpdateBatchSize 属性
    启用了批量更新后,DataAdapter 的 UpdateCommand、InsertCommand 和 DeleteCommand 的 UpdatedRowSource 属性值应设置为 None 或 OutputParameters。在执行批量更新时,命令的 FirstReturnedRecord 或 Both 的 UpdatedRowSource 属性值无效。

    下面的过程演示如何使用 UpdateBatchSize 属性。该过程采用两个参数,一个 DataSet 对象,其中包含代表 PRoduction.ProductCategory 表中的 ProductCategoryID 和 Name 字段的列,一个代表批次大小的整数(批次中的行数)。该代码创建一个新的 SqlDataAdapter 对象,设置其 UpdateCommand、InsertCommand 和 DeleteCommand 属性。该代码假定 DataSet 对象已修改了行。它设置 UpdateBatchSize 属性并执行更新。

代码:
   
 protected void btnUpdateAddress_Click(object sender, EventArgs e)
    {
    SqlDataAdapter EmpAdapter = new SqlDataAdapter();
    DataTable EmpDT = new DataTable();
    SqlConnection DBConSelect = new SqlConnection();
    SqlConnection DBConUpdate = new SqlConnection();
    SqlCommand SelectCommand = new SqlCommand();
    SqlCommand UpdateCommand = new SqlCommand();
    // Using different connection objects for select and updates from the
    // Northwind database.
    DBConSelect.ConnectionString =
    ConfigurationManager.ConnectionStrings["DSN_NorthWind"].ConnectionString;
    DBConUpdate.ConnectionString =
    ConfigurationManager.ConnectionStrings["DSN_NorthWind"].ConnectionString;
    // Reading all records from the Employees table
    SelectCommand.CommandText = "SELECT top 500 * FROM EMPLOYEES";
    SelectCommand.CommandType = CommandType.Text;
    SelectCommand.Connection = DBConSelect;


 UpdateCommand.CommandText = " UPDATE EMPLOYEES SET Address=@Address, " +
    "City=@City, Region=@Region, Country=@Country";
    UpdateCommand.CommandType = CommandType.Text;
    UpdateCommand.Connection = DBConUpdate;
    SqlParameter AddressParam;
    AddressParam = new SqlParameter("@Address",
    SqlDbType.VarChar, 15, "Address");
    SqlParameter CityParam;
    CityParam = new SqlParameter("@City", SqlDbType.VarChar, 15, "City");
    SqlParameter RegionParam;
    RegionParam = new SqlParameter("@Region", SqlDbType.VarChar, 15, "Region");
    SqlParameter CountryParam;
    CountryParam = new SqlParameter("@Country",
    SqlDbType.VarChar, 15, "Country");
    UpdateCommand.Parameters.Add(AddressParam);
    UpdateCommand.Parameters.Add(CityParam);
    UpdateCommand.Parameters.Add(RegionParam);
    UpdateCommand.Parameters.Add(CountryParam);
    // Setting up Data Adapter with the Select and Update Commands
    // The Select command will be used to retrieve all employee
    // information from the Northwind database and the Update command
    // will be used to save changes back to the database
    EmpAdapter.SelectCommand = SelectCommand;
    EmpAdapter.UpdateCommand = UpdateCommand;
    EmpAdapter.Fill(EmpDT);
    DBConSelect.Close();
    // Looping through all employee records and assigning them the new
    // address -- by www.jbxue.com
    foreach (DataRow DR in EmpDT.Rows)
    {
    DR["Address"] = "4445 W 77th Street, Suite 140";
    DR["City"] = "Edina";
    DR["Region"] = "Minnesota";
    DR["Country"] = "USA";
    }
    // Adding an event handler to listen to the RowUpdated event.
    // This event will will fire after each batch is executed
    EmpAdapter.RowUpdated +=  new SqlRowUpdatedEventHandler(OnRowUpdated);
    lblCounter.Text = "";
    EmpAdapter.UpdateBatchSize = 100;
    // It is important to set this property for batch processing of
    // updated records since batch updates are incapable of
    // updating the source with changes from the database
    UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
    try
    {
    DBConUpdate.Open();
    EmpAdapter.Update(EmpDT);
    }
    catch (Exception ex)
    {
    lblCounter.Text += ex.Message + "<Br>";
    }
    finally
    {
    if (DBConUpdate.State == ConnectionState.Open)
    {
    DBConUpdate.Close();
    }
    }
    }
    private void OnRowUpdated(object sender, SqlRowUpdatedEventArgs args)
    {
    lblCounter.Text += "Batch is processed till row number = " +
    args.RowCount.ToString() + "<br>";
    }
VSCode 搭建C/C++编程环境 2025新版图文安装教程(VSCode安装 + C/C++环境搭建 + 运行测试 + 背景图设置) 100%搭建成功,VSCode 搭建C++编程环境 2025新版图文安装教程(VSCode安装+C++环境搭建+运行测试+背景图设置) 阅读详情

相关推荐

Vue项目实战:海康WebControl插件从安装到预览功能全流程(附RSA加密避坑指南)

本文详细介绍了在Vue项目中集成海康威视WebControl插件的全流程,从环境准备、插件部署到核心功能实现。重点解析了使用JS_RequestInterface获取RSA公钥并进行加密参数初始化的关键步骤与常见避坑指南,帮助开发者高效完成监控视频预览功能的开发与调试。

linux6sysadmin的博客 1227

C# 向数据库批量更新数据(插入、更新、删除)

批量操作数据是利用 CommandBuilder 和 DataAdapter.Update() 方法 对数据库进行批量更新 说解: DataAdapter中有四个重要对象:SelectCommand,InsertCommand,UpdateCommand ,DeleteCommand 以SelectCommand 最为重要 只要设置好DataAdapter.SelectCommand(其

iloli的专栏 3万+

48V电气架构全面科普和解析:下一代智能电动汽车核心驱动

随着电动汽车(EV)技术的不断发展,传统的12V电力系统已经逐渐无法满足日益增长的功率需求,尤其是在电动汽车中,48V电气系统的引入成为了一种理想的解决方案。在电动汽车中,48V系统与Zonal架构的结合,不仅有效提升了车辆电力系统的能效,还为未来的技术升级提供了灵活的设计基础。随着电动汽车(EV)技术的发展,车辆电气系统的工作电压逐步从传统的12V系统向更高的电压过渡。随着电动汽车技术的不断进步,传统的12V电气系统逐渐无法满足现代高性能电动汽车的需求,而48V电力系统的引入成为一种理想的解决方案。

weixin_43199439的博客 7810

使用 DataAdapter 更新数据源 (ADO.NET)

<br />调用 DataAdapter 的 Update 方法可以将 DataSet 中的更改解析回数据源。与 Fill 方法类似,Update 方法将 DataSet 的实例和可选的 DataTable 对象或 DataTable 名称用作参数。DataSet 实例是包含已做的更改的 DataSet,DataTable 标识从其中检索这些更改的表。如果未指定 DataTable,则使用 DataSet 中的第一个 DataTable。<br />当调用 Update 方法时,DataAdapter 会分

chinaspring的专栏 1096

抖音直播“卡黑屏”技术解析:从实现原理到平台风控与合规运营

在直播技术领域,视频流推送与实时互动是核心基础。其原理在于通过编码软件(如OBS)将音视频数据封装后,经由网络协议推送到服务器,再分发给观众。这项技术的价值在于支撑了实时、高并发的在线互动场景,是直播、在线会议等应用的基石。然而,在追求流量和互动的实践中,衍生出一些非常规操作,例如通过技术手段中断或控制视频流推送,仅保留音频和互动功能,以达到特定运营目的。这便涉及到了**卡黑屏**这一具体现象。它本质上是对直播流的人为干预,常与**流量博弈**和**风险规避**等动机相关联。从工程实践角度看,实现方式多样,

weixin_29895109的博客 1295

国产谷歌地球,地形分析秒杀同款地图软件

咱们做地质、林业、水文、水利、电力、GIS、地图、水保、环境的,需要经常用到各种数据,比如影像、地形、矢量、模型等,但目前80%的规划大数据展示都离不开ArcGIS,令人头大的是很多朋友连ArcGIS软件安装起来都费劲。。。 那不会ArcGIS又装不了Google Earth怎么开展工作? 今天推荐大家一款国产免费专业地图浏览下载测量分析神器—图新地球 图新地球,国产三维gis软件。可以查看高清卫星影像地形以及其他很多常用电子地图,对地图需求的掌握远胜过Google Maps,而且上手比国外软件要简单

GISWorld3D的博客 3685

.Net中DataAdapter批量插入和更新数据总结

前言   前段时间一直在忙着项目上线,在做项目的同时遇到了一些之前不曾碰到的问题,因为没有经验,只能从网上找一些相关的解决方案,但是网上提供的资料实在是太杂,有的根本不能用,耗时又耗力。   我希望把我这段时间遇到的问题记录下来,去帮助那些当时和我一样“饥渴”的人,以减少时间成本,大家放心,遇到的这些问题提供的解决方案都是经过我们测试,现在正在用的,基本上没什么问题。有什么问题,大家也可以进行...

weixin_33767813的博客 255

STM32项目实战_基于STM32F103的智能药箱设计与实现(硬件详解+软件逻辑+调试要点)

本文详细介绍了基于STM32F103的智能药箱设计与实现,涵盖硬件设计、软件逻辑和调试要点。项目核心功能包括精准提醒、药品管理和远程监控,采用STM32单片机作为主控,结合光电开关、蓝牙模块等实现智能化管理。文章还分享了电路图设计、程序优化及常见问题解决方案,为嵌入式开发爱好者提供实用参考。

weixin_28717683的博客 303

使用 DataAdapter 执行批量更新

   摘自MSDN:在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行。因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改。如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand、InsertComman

clingingboy的专栏 502

BU61580芯片实战:手把手教你配置1553B通信的BC端寄存器(含代码解析)

本文详细解析了BU61580芯片在1553B通信中的BC端寄存器配置方法,包括关键寄存器功能映射、初始化代码解析及回环测试实现。通过实战案例和代码示例,帮助开发者快速掌握1553B通信的核心技术,提升系统稳定性和通信质量。

a1b2c的博客 223

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

官网:www.SZLCSC.COM以芯片为例器件类——>芯片类——>对应芯片确定芯片——>数据手册1:原理图2:PCB3:打开操作流程选中原理图——>文件——>导出——>AD1: ✔2:导出AD文件操作流程选中PCB图——>文件——>导出——>AD1: ✔2:导出AD文件1:PCB图2:原理图操作流程文件——>打开操作流程选中文件——>打开操作流程项目文件——>添加新的...到工程——>Schematic Library新原理图库操作流程项目文件——>添加新的...到工程——>PCB Library新的PC

XU157303764的博客 5436

使用DataAdapter 执行批量更新

在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行。因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改。如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand、InsertCommand 或 DeleteComman...

weixin_33756418的博客 87

【Bug已解决】claude: No such file or directory — Claude Code 命令凭空消失解决方案

方案适用场景推荐指数难度方案一:重建软链接所有平台,软链接断裂⭐⭐⭐⭐⭐低方案二:修复 shebangnvm 用户,不想重装⭐⭐⭐⭐中方案三:nvm default aliasnvm 用户,长期稳定⭐⭐⭐⭐低方案四:切换到 Volta频繁切换 Node.js 版本⭐⭐⭐中方案五:修复 PATHPATH 配置丢失⭐⭐⭐⭐低方案六:Homebrew 安装macOS 用户,npm 不稳定⭐⭐⭐⭐低根本原因与。

博客 1万+

使用DataAdapter执行批量更新

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 468

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[转]使用 DataAdapter 执行批量更新

使用 DataAdapter 执行批量更新 在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行。因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改。如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand...

weixin_30394251的博客 207

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SqlCommand 添加参数-与DataAdapter更新

SqlCommand 带参数,带事务。 【理论基础】 在2.0以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行。因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改。如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand、InsertCommand 或 DeleteCommand。每一次行更新都涉及网络与数据库之间的双向数据.

qq_33606071的博客 806

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

DataAdapter 的批量更新

在以前版本的 ADO.NET 中,使用 DataSet 中的更改来更新数据库时,DataAdapter 的 Update 方法每次更新数据库的一行。因为该方法循环访问指定 DataTable 中的行,所以,会检查每个 DataRow,确定是否已修改。如果该行已修改,将根据该行的 RowState 属性值调用相应的 UpdateCommand、InsertCommand 或 DeleteComman

小丸子的博客 559

使DataAdapter自动创建更新语句

使DataAdapter自动创建更新语句 前头的那个我不小心将问号删去了. 做这个用了一天时间,比较仓促,还没有全面检验过。 使用过程中如发现不足之处,请在我的BLOG上留一句话。 BLOG:http://blog.youkuaiyun.com/lzmtw       Public NotInheritable Class TableColumnInfo         Private Const [Base

水如烟 7056

ADO.NET系列之DataAdapter对象

ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 我们前两篇文章介绍了ADO.NET的概念,以及介绍了Connection和Command对象,基本的增删改查操作都能够实现了,本节再介绍一个强大的DataAda...

weixin_30823833的博客 399
上一篇: JavaScript字符串插入、删除、替换函数的例子
下一篇: 清除SQL SERVER错误日志出现操作系统错误的解决方法
my_baby_2009
博客等级 码龄14年 31粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值