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

SqlBulkCopy實現數據批量復制

編輯:.NET實例教程

最近項目中使用到了SqlBulkCopy實現批量復制,在這裡,我把部分代碼篩選出來簡單說明一下,希望對大家研究和使用SqlBulkCopy有幫助.因為是篩選的代碼,不是完整的方法,請大家盡量不要直接拷貝使用,這篇文章的目的上幫大家簡單的理解SqlBulkCopy.



/**//*******************調用SqlBulkCopy實現DataTable到SQL的批量拷貝******************/
            if (SqlConn.State == ConnectionState.Closed)
            ...{
                SqlConn.Open();
            }

            //定義SQL事務並嵌入到批量拷貝的工作中
            SqlTransaction obJSqlTran = SqlConn.BeginTransaction();

            //定義SqlBulkCopy:SqlConn為SqlConnection,SqlBulkCopyOptions枚舉類型,obJSqlTran為調用的事務
            SqlBulkCopy objSqlCopy = new SqlBulkCopy(SqlConn, SqlBulkCopyOptions.KeepIdentity, obJSqlTran);

            //分批次拷貝的行數
            obJSqlCopy.BatchSize = 10;
            obJSqlCopy.BulkCopyTimeout = 240;
            //目標表名
            obJSqlCopy.DestinationTableName = "DetailAccountReport";

            //源表對目標表字段的映射,因為默認是按順序以及名字匹配,所以這步很重要
            obJSqlCopy.ColumnMappings.Add("ProjectDefID", "ProjectDefID");
            obJSqlCopy.ColumnMappings.Add("Num", "SumNum");
            obJSqlCopy.ColumnMappings.Add("Money", "SumMoney");
       obJSqlCopy.ColumnMappings.Add("Explain", "Explain");

            try
            ...{
                //將DataTabel類型的objDT作為源拷貝到目標表
                obJSqlCopy.WriteToServer(objDT);
                obJSqlTran.Commit();
            }
            catch
            ...{
                obJSqlTran.Rollback();
            }
            finally
            ...{
                obJSqlCopy.Close();
                SqlConn.Close();
            }

            return objDT;

 

說明://源表對目標表字段的映射,因為默認是按順序以及名字匹配,所以這步很重要
            obJSqlCopy.ColumnMappings.Add("ProjectDefID", "ProjectDefID");
            obJSqlCopy.ColumnMappings.Add("Num", "SumNum");
            obJSqlCopy.ColumnMappings.Add("Money", "SumMoney");
            obJSqlCopy.ColumnMappings.Add("Explain", "Explain");

注意這裡,前面是源表字段,後面是目標表字段.默認是按照順序和名稱匹配的形式,所以要求兩個數據集的結構完全一致,但是在現實使用中,很少有完全一致的情況出現,所以這段代碼尤其重要.


obJSqlCopy.WriteToServer(objDT);

objDT是我們項目中在之前經過處理的DataTable, WriteToServer()支持對DataTable,DataReader,DataRow[]的操作,大家可以靈活運用.

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