程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> DataAdapter執行批量更新的實例代碼

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

編輯:關於ASP.NET
    這篇文章介紹了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 + "<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>";
        }

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved