熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

DataAdapter執行批量更新的實例代碼

2013-11-13 10:46:15  來源: .NET編程 
這篇文章介紹了DataAdapter執行批量更新的實例代碼有需要的朋友可以參考一下希望對你有所幫助  

  在以前版本的 ADONET 中使用 DataSet 中的更改來更新數據庫時DataAdapter 的 Update 方法每次更新數據庫的一行因為該方法循環訪問指定 DataTable 中的行所以會檢查每個 DataRow確定是否已修改如果該行已修改將根據該行的 RowState 屬性值調用相應的 UpdateCommandInsertCommand 或 DeleteCommand每一次行更新都涉及網絡與數據庫之間的雙向數據傳輸
    在 ADONET DataAdapter 公開了 UpdateBatchSize 屬性將 UpdateBatchSize 設置為正整數值將使對數據庫的更新以指定大小的批次進行發送例如如果將 UpdateBatchSize 設置為 會將 個獨立的語句組合在一起並作為一批提交將 UpdateBatchSize 設置為 將導致 DataAdapter 使用服務器可以處理的最大批次的大小如果將其設置為 則禁用批量更新因為此時每次發送一行
    執行非常大的批次可能會降低性能因此在實現應用程序之前應測試最佳的批次大小設置
    使用 UpdateBatchSize 屬性
    啟用了批量更新後DataAdapter 的 UpdateCommandInsertCommand 和 DeleteCommand 的 UpdatedRowSource 屬性值應設置為 None 或 OutputParameters在執行批量更新時命令的 FirstReturnedRecord 或 Both 的 UpdatedRowSource 屬性值無效
    下面的過程演示如何使用 UpdateBatchSize 屬性該過程采用兩個參數一個 DataSet 對象其中包含代表 PRoductionProductCategory 表中的 ProductCategoryID 和 Name 字段的列一個代表批次大小的整數(批次中的行數)該代碼創建一個新的 SqlDataAdapter 對象設置其 UpdateCommandInsertCommand 和 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
    DBConSelectConnectionString =
    ConfigurationManagerConnectionStrings["DSN_NorthWind"]ConnectionString;
    DBConUpdateConnectionString =
    ConfigurationManagerConnectionStrings["DSN_NorthWind"]ConnectionString;
    // Reading all records from the Employees table
    SelectCommandCommandText = "SELECT top * FROM EMPLOYEES";
    SelectCommandCommandType = CommandTypeText;
    SelectCommandConnection = DBConSelect;  UpdateCommandCommandText = " UPDATE EMPLOYEES SET Address=@Address " +
    "City=@City Region=@Region Country=@Country";
    UpdateCommandCommandType = CommandTypeText;
    UpdateCommandConnection = DBConUpdate;
    SqlParameter AddressParam;
    AddressParam = new SqlParameter("@Address"
    SqlDbTypeVarChar "Address")
    SqlParameter CityParam;
    CityParam = new SqlParameter("@City" SqlDbTypeVarChar "City")
    SqlParameter RegionParam;
    RegionParam = new SqlParameter("@Region" SqlDbTypeVarChar "Region")
    SqlParameter CountryParam;
    CountryParam = new SqlParameter("@Country"
    SqlDbTypeVarChar "Country")
    UpdateCommandParametersAdd(AddressParam)
    UpdateCommandParametersAdd(CityParam)
    UpdateCommandParametersAdd(RegionParam)
    UpdateCommandParametersAdd(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
    EmpAdapterSelectCommand = SelectCommand;
    EmpAdapterUpdateCommand = UpdateCommand;
    EmpAdapterFill(EmpDT)
    DBConSelectClose()
    // Looping through all employee records and assigning them the new
    // address
    foreach (DataRow DR in EmpDTRows)
    {
    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
    EmpAdapterRowUpdated +=  new SqlRowUpdatedEventHandler(OnRowUpdated)
    lblCounterText = "";
    EmpAdapterUpdateBatchSize = ;
    // 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
    UpdateCommandUpdatedRowSource = UpdateRowSourceNone;
    try
    {
    DBConUpdateOpen()
    EmpAdapterUpdate(EmpDT)
    }
    catch (Exception ex)
    {
    lblCounterText += exMessage + "<Br>";
    }
    finally
    {
    if (DBConUpdateState == ConnectionStateOpen)
    {
    DBConUpdateClose()
    }
    }
    }
    private void OnRowUpdated(object sender SqlRowUpdatedEventArgs args)
    {
    lblCounterText += "Batch is processed till row number = " +
    argsRowCountToString() + "<br>";
    }


From:http://tw.wingwit.com/Article/program/net/201311/14475.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.