利用SqlBulkCopy快速大大量匯入資料

來源:互聯網
上載者:User
實際的開發可能會遇到資料大批量插入資料的問題,若是一條條的迴圈倒數效率非常低下,這個較好的解決方案
  protected void Button1_Click(object sender, EventArgs e)
     { 
 
        DateTime beginTime = DateTime.Now;
       Response.Write("開始時間:" + beginTime.ToString("yyyy年MM月dd日:HH:mm:ss:fff")); 

         //構造一個Datatable儲存將要大量匯入的資料
        DataTable dt = new DataTable();
         dt.Columns.Add("id", typeof(string));
       dt.Columns.Add("name", typeof(string)); 

       // 見識下SqlBulkCopy強悍之處,來個十萬條數資料實驗
        int i;
       for (i = 0; i < 100000; i++)
         {
            DataRow dr = dt.NewRow();
             dr["name"] = i.ToString();
             dt.Rows.Add(dr);
        } 

        string str = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString.ToString();
       //聲明資料庫連接
       SqlConnection conn = new SqlConnection(str); 

        conn.Open();
       //聲明SqlBulkCopy ,using釋放非託管資源
       using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
        {
             //一次批量的插入的資料量
           sqlBC.BatchSize = 1000;
            //逾時之前操作完成所允許的秒數,如果逾時則事務不會提交 ,資料將復原,所有已複製的行都會從目標表中移除
           sqlBC.BulkCopyTimeout = 60; 

             //設定 NotifyAfter 屬性,以便在每插入10000 條資料時,呼叫相應事件。  
           sqlBC.NotifyAfter = 10000;
             sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied); 

             //設定要批量寫入的表
           sqlBC.DestinationTableName = "dbo.text"; 

            //自訂的datatable和資料庫的欄位進行對應
            sqlBC.ColumnMappings.Add("id", "tel");
          sqlBC.ColumnMappings.Add("name", "neirong"); 

            //批量寫入
            sqlBC.WriteToServer(dt);
        }
         conn.Dispose();
    Response.Write("<br/>"); 



         DateTime endTime = DateTime.Now;
        Response.Write("結束時間:" + endTime.ToString("yyyy年MM月dd日:HH:mm:ss:fff"));
       TimeSpan useTime = endTime-beginTime;//使用時間
        Response.Write("<br/>插入時間:"+ useTime.TotalSeconds.ToString()+"秒"); 

   }
     //響應時事件
   void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
     {
    Response.Write("<br/> OK! ");
   } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.