知识大全 使用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

相关参考