程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> SqlBulkCopy excel 字段映射解決辦法一 修改中間件datatable 的 ColumnName 使之 與 目標表一致

SqlBulkCopy excel 字段映射解決辦法一 修改中間件datatable 的 ColumnName 使之 與 目標表一致

編輯:C#入門知識

利用SqlBulkCopy導入Excel數據庫

     由於最近的項目需要大量的數據從Excel導入到SQL Server數據庫當中,數據量非常大,綜合考濾了一下,采用SqlBulkCopy進行數據的導入。

 

    由於Excel表中的表頭,與數據庫中的字段是不一樣的,所以需要添加映射。之前在這個地方走了許多彎路。項目實際情況如下。

 

     項目中內容的呈現是用中文,而數據表頭是英文的。剛開始時是直接從Excel表中讀出數據,生成DataTable,添加自定義列(Excel中不存在姓名、用戶ID等),添加數據列表,然後直接修改DataTable的ColumnName,然後直接給SqlBulkCopy去更新到數據庫。結果出現錯誤,無法從String類型轉到Int,由於通過修改ColumnName,兩張表的結構是一致的,茫然了一陣。

 

     通過分析,由於自己數據庫中的Id是自動增長的,而使用SqlBulkCopy時卻沒有沒有指定去映射相對應的表頭,所以造成這個問題。添加sqlBulkCopy.ColumnMappings即可解決。

 

   結果導入成功後,卻發現有些數據是無法呈現,從過查找,發現Excel表中的單元格出現錯誤提醒“此單元格的數字為文本格式”。找了資料發現需要修改服務器的注冊表。相關的文章已經發布。

 

只貼關鍵代碼

--------------------------------------

ccl:ColumnMappings映射

tablename:需更新的表名

dataTable:導入的數據表

 

  public static int SqlBulkCopyInsert(string tablename, DataTable dataTable, Hashtable ccl)         {             SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(T.getcs(""));                         foreach (string str in ccl.Keys)             {                 sqlBulkCopy.ColumnMappings.Add(str, ccl[str].ToString());             }             sqlBulkCopy.DestinationTableName = tablename;             if (dataTable != null && dataTable.Rows.Count != 0)             {                 sqlBulkCopy.WriteToServer(dataTable);                 sqlBulkCopy.Close();                 return dataTable.Rows.Count;             }             else             {                 sqlBulkCopy.Close();                 return 0;             }

        }

--------------------------------------------

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