1、csv文件簡介
CSV全稱 Comma Separated values,是一種用來存儲數據的純文本文件格式,通常用於電子表格或數據庫軟件。這樣你就發現了,csv其實就是純文本文件,可以使用記事本打開。但是因為他一般表示的是表,所以windows下默認的是用excel打開的。
他的規則如下:
開頭是不留空,以行為單位。
- 可含或不含列名,含列名則居文件第一行。(這一點在插入時需要注意判斷,如果第一行是列名,那么需要把第一行數據拋棄)
- 一行數據不垮行,無空行。
- 以半角符號[,]作分隔符,列為空也要表達其存在。
- 列內容如存在[,],則用雙引號[””]將該字段內容包含起來。
- 列內容如存在[”],雙引號[””]將該字段內容包含起來,並且在內容中用兩個雙引號表示一雙引號[””]。
- 文件讀寫時引號,逗號操作規則互逆。
- 內碼格式不限,可為ASCII、Unicode或者其他。
2、插入數據庫操作
將csv文件插入數據庫是一個常見的需求,最簡單的做法就是直接讀取csv文件,然后一行一行讀出來后用split(",")分割之后插到數據庫中。當然這種方法雖然看起來簡單,但是有寫問題很難解決。比如列內容中有[,]的問題,這種情況如果用這種方法的話很難判斷。所以一般情況下不能推薦使用這種方法來插入數據。
今天我介紹的方法是用Microsoft ActiveX Data Objects 來做:
(1)引入Microsoft ActiveX Data Objects
右擊“引用”——COM選項卡——Microsoft ActiveX Data Objects,我的電腦是6.0版本的,實際使用中版本間差距不大,代碼都可以通用。

(2)代碼部分:
/// <summary> /// 將csv文件導入到數據庫中 /// </summary> /// <param name="strCSVFile">導入的文件名</param> /// <param name="strPathToTextFile">文件的存儲路徑</param> public void test(string strCSVFile, string strPathToTextFile) { Connection adoCSVConnection = null; Recordset adoCSVRecordSet = null; try { adoCSVConnection = new Connection(); adoCSVRecordSet = new Recordset(); adoCSVConnection.Open(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;HDR=YES;FMT=Delimited\"", strPathToTextFile)); adoCSVRecordSet.Open(string.Format("SELECT * FROM {0}", strCSVFile), adoCSVConnection); while (!adoCSVRecordSet.EOF) { for (int i = 0; i < adoCSVRecordSet.Fields.Count; i++) { var strsource = adoCSVRecordSet.Fields[i].Value;
//到這里你懂的了吧...^_^ } adoCSVRecordSet.MoveNext(); } } catch (Exception ex) { } finally { if (adoCSVRecordSet != null) { adoCSVRecordSet.Close(); } if (adoCSVConnection != null) { adoCSVConnection.Close(); } } }
這種方法其實是將csv文件作為一種數據庫來操作,你可以看到有連接字符串"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;HDR=YES;FMT=Delimited\""。
將csv文件插入到數據庫中還有很多因素要考慮,比如對於大批量的數據需要用到多線程,以及對於mvc中無法使用webform中的委托回調函數來獲得數據更改ui線程。這些問題以后有時間再寫出來。
