将csv文件导入到数据库中
1、csv文件簡(jiǎn)介
CSV全稱(chēng)?Comma Separated values,是一種用來(lái)存儲(chǔ)數(shù)據(jù)的純文本文件格式,通常用于電子表格或數(shù)據(jù)庫(kù)軟件。這樣你就發(fā)現(xiàn)了,csv其實(shí)就是純文本文件,可以使用記事本打開(kāi)。但是因?yàn)樗话惚硎镜氖潜?#xff0c;所以windows下默認(rèn)的是用excel打開(kāi)的。
他的規(guī)則如下:
?開(kāi)頭是不留空,以行為單位。
- 可含或不含列名,含列名則居文件第一行。(這一點(diǎn)在插入時(shí)需要注意判斷,如果第一行是列名,那么需要把第一行數(shù)據(jù)拋棄)
- 一行數(shù)據(jù)不垮行,無(wú)空行。
- 以半角符號(hào)[,]作分隔符,列為空也要表達(dá)其存在。
- 列內(nèi)容如存在[,],則用雙引號(hào)[””]將該字段內(nèi)容包含起來(lái)。
- 列內(nèi)容如存在[”],雙引號(hào)[””]將該字段內(nèi)容包含起來(lái),并且在內(nèi)容中用兩個(gè)雙引號(hào)表示一雙引號(hào)[””]。
- 文件讀寫(xiě)時(shí)引號(hào),逗號(hào)操作規(guī)則互逆。
- 內(nèi)碼格式不限,可為ASCII、Unicode或者其他。
2、插入數(shù)據(jù)庫(kù)操作
將csv文件插入數(shù)據(jù)庫(kù)是一個(gè)常見(jiàn)的需求,最簡(jiǎn)單的做法就是直接讀取csv文件,然后一行一行讀出來(lái)后用split(",")分割之后插到數(shù)據(jù)庫(kù)中。當(dāng)然這種方法雖然看起來(lái)簡(jiǎn)單,但是有寫(xiě)問(wèn)題很難解決。比如列內(nèi)容中有[,]的問(wèn)題,這種情況如果用這種方法的話很難判斷。所以一般情況下不能推薦使用這種方法來(lái)插入數(shù)據(jù)。
今天我介紹的方法是用Microsoft ActiveX Data Objects 來(lái)做:
(1)引入Microsoft ActiveX Data Objects
右擊“引用”——COM選項(xiàng)卡——Microsoft ActiveX Data Objects,我的電腦是6.0版本的,實(shí)際使用中版本間差距不大,代碼都可以通用。
?
?
(2)代碼部分:
/// <summary>/// 將csv文件導(dǎo)入到數(shù)據(jù)庫(kù)中/// </summary>/// <param name="strCSVFile">導(dǎo)入的文件名</param>/// <param name="strPathToTextFile">文件的存儲(chǔ)路徑</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();}}}
這種方法其實(shí)是將csv文件作為一種數(shù)據(jù)庫(kù)來(lái)操作,你可以看到有連接字符串"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"text;HDR=YES;FMT=Delimited\""。
?
將csv文件插入到數(shù)據(jù)庫(kù)中還有很多因素要考慮,比如對(duì)于大批量的數(shù)據(jù)需要用到多線程,以及對(duì)于mvc中無(wú)法使用webform中的委托回調(diào)函數(shù)來(lái)獲得數(shù)據(jù)更改ui線程。這些問(wèn)題以后有時(shí)間再寫(xiě)出來(lái)。
轉(zhuǎn)載于:https://www.cnblogs.com/zhangkai2237/archive/2012/08/12/2635317.html
總結(jié)
以上是生活随笔為你收集整理的将csv文件导入到数据库中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WPF换肤之七:异步
- 下一篇: Android 开发笔记 ListVie