C# DataTable 快速導入數據庫

摘自:http://hi.baidu.com/s__wind/item/2af5f23a31d189fa97f88d5e

           http://www.cnblogs.com/wz327/archive/2011/07/05/2098356.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace WFM_SANY_SPDM
{
    public class SqlBulk
    {
        public void InsertTable(DataTable dt, string TabelName,DataColumnCollection dtColum)
        {
            string str = ConfigurationManager.ConnectionStrings["ConnectionString"].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 =TabelName;
                //自定義的datatable和數據庫的字段進行對應
                //sqlBC.ColumnMappings.Add("id", "tel");
                //sqlBC.ColumnMappings.Add("name", "neirong");
                for (int i = 0; i < dtColum.Count; i++)
                {
                    sqlBC.ColumnMappings.Add(dtColum[i].ColumnName.ToString(), dtColum[i].ColumnName.ToString());
                }
                //批量寫入
                sqlBC.WriteToServer(dt);
            }
            conn.Dispose();
        }
        //響應時事件
        void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
        {
            // Response.Write("<br/> OK! ");
        }

    }
}

用SqlBulkCopy批量插入數據 遇到的錯誤

錯誤一:來自數據源的 String 類型的給定值不能轉換爲指定目標列的類型 nvarchar。

還有其他的錯誤如:AddTime不能爲DBNull (這個應該是目標表中AddTime要求不許爲null),哈哈,錯誤多了,都忘記了。。。

可能的原因有兩種

  1. 可能是有"'"(單引號),替換成““”(雙引號)。
  2. 可能是目標表字段的長度比要導入的數據長度小。

錯誤二:給定的 ColumnMapping 與源或目標中的任意列均不匹配。

可能的原因

1.源數據的字段名稱和目標數據的字段名稱不匹配(大小寫敏感的,這個要加強注意啊!

  如:UserName 和 Username ,這樣就不行



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章