知识大全 使用DataAdapter执行批量更新
Posted 属性
篇首语:没有激流就称不上勇进,没有山峰则谈不上攀登。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用DataAdapter执行批量更新相关的知识,希望对你有一定的参考价值。
使用DataAdapter执行批量更新 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在以前版本的 ADO NET 中 使用 DataSet 中的更改来更新数据库时 DataAdapter 的 Update 方法每次更新数据库的一行 因为该方法循环访问指定 DataTable 中的行 所以 会检查每个 DataRow 确定是否已修改 如果该行已修改 将根据该行的 RowState 属性值调用相应的 UpdateCommand InsertCommand 或 DeleteCommand 每一次行更新都涉及网络与数据库之间的双向数据传输
在ADO NET 中 DataAdapter 公开了UpdateBatchSize 属性 将 UpdateBatchSize 设置为正整数值将使对数据库的更新以指定大小的批次进行发送 例如 如果将 UpdateBatchSize 设置为 会将 个独立的语句组合在一起并作为一批提交 将 UpdateBatchSize 设置为 将导致 DataAdapter 使用服务器可以处理的最大批次的大小 如果将其设置为 则禁用批量更新 因为此时每次发送一行
执行非常大的批次可能会降低性能 因此 在实现应用程序之前 应测试最佳的批次大小设置
使用 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 * 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 Address );
SqlParameter CityParam;
CityParam = new SqlParameter( @City SqlDbType VarChar City );
SqlParameter RegionParam;
RegionParam = new SqlParameter( @Region SqlDbType VarChar Region );
SqlParameter CountryParam;
CountryParam = new SqlParameter( @Country
SqlDbType VarChar 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 mand will be used to retrieve all employee
// information from the Northwind database and the Update mand
// 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 ] = W th Street Suite ;
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 = ;
// 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> ;
cha138/Article/program/net/201311/12203相关参考