千家信息网

如何使用DataAdapter执行批量更新

发表于:2024-11-12 作者:千家信息网编辑
千家信息网最后更新 2024年11月12日,这篇文章给大家分享的是有关如何使用DataAdapter执行批量更新的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在以前版本的 ADO.NET 中,使用 DataSet 中
千家信息网最后更新 2024年11月12日如何使用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
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 + "
";
}
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() + "
";
}

感谢各位的阅读!关于"如何使用DataAdapter执行批量更新"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

更新 属性 批次 数据 代码 大小 数据库 对象 一行 代表 内容 方法 更多 篇文章 过程 不错 实用 最大 两个 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库新增用户 广东网络安全王锋 查询中奖记录使用什么数据库 大学生网络安全防诈骗内容 重生异世互联网科技娱乐小说 直销系统软件开发多少钱 可用性数据库是什么意思 传奇世界连接服务器失败 重庆app软件开发多少钱 博士网络安全管理路由器平台 黑蚂蚁网络安全 农村老年网络安全宣传 为什么设备管理要登录服务器 人民日报关于网络安全的文章 wegame不显示服务器延迟 泰山市网络安全与信息化协调科 手机数据库管理系统是什么 强调了网络安全的重要性 游戏软件开发开题报告 数据库设计技术规范 网络安全与防火墙的论文总结 深圳房产信息网数据库 北京市互联网科技创新 ntp服务器的16进制掩码 网络安全监控电路板 上海昀畅互联网科技有限公司 git服务器 的备份 计算机网络技术实习考核 贵州稻草人网络技术有限公司 东营管理软件开发哪家便宜
0