C#sqlbulkcopy的最佳化

來源:互聯網
上載者:User

標籤:

最近在進行項目的最佳化。現在部分資料的拷貝時間過長。需要進行上線前的最佳化,嘗試,批次的數量和拷貝次數的之間的合理數值關係。

最近項目中使用到了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[]的操作,大家可以靈活運用.

C#sqlbulkcopy的最佳化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.