本篇內(nèi)容主要講解“如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題”吧!
成都一家集口碑和實力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊和靠譜的建站技術(shù),10年企業(yè)及個人網(wǎng)站建設(shè)經(jīng)驗 ,為成都上1000家客戶提供網(wǎng)頁設(shè)計制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,同時也為不同行業(yè)的客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)。
在使用Microsoft.Jet.OLEDB.4.0連接Excel,進(jìn)行讀取數(shù)據(jù),相對使用傳統(tǒng)的COM來讀取數(shù)據(jù),效率是很高的。但相對傳統(tǒng)COM操作Excel來說,及存在數(shù)據(jù)類型轉(zhuǎn)換的問題。
因為使用OLEDB連接Excel讀取數(shù)據(jù)時,需要確定數(shù)據(jù)的類型。默認(rèn)情況使用連接字符串:
view source
print ?
1. string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties='Excel 8.0;'";
使用上面的連接字符串連接Excel時,可能會遇到數(shù)據(jù)類型不一致的問題。所謂數(shù)據(jù)類型不一致,是指同一列里面數(shù)據(jù)類型可能出現(xiàn)多種,如浮點數(shù)、字符串、日期等;當(dāng)出現(xiàn)此類情況時,讀取出來的數(shù)據(jù)就為空,甚至?xí)箦e,如“非法的日期格式”等異常。出現(xiàn)這種問題,我們大家都會想到把數(shù)據(jù)全部都按字符數(shù)據(jù)來讀取,但是按什么數(shù)據(jù)類型來讀取不是我們能控制的,是OLEDB控制的,至少暫時我還沒有找到能控制輸出數(shù)據(jù)類型的方法。因為我當(dāng)初也嘗試使用convert,cast函數(shù)對輸出的列進(jìn)行類型轉(zhuǎn)換,但oledb連接Excel時,使用的SQL不支持這些函數(shù)。因此只能從其他角度來解決該問題。我也在網(wǎng)上搜索了很多解決方法,最全面的解決方法是:http://www.douban.com/note/18510346/。下面列出了網(wǎng)上出現(xiàn)解決該問題方法的比較:
這里提供一個更加方便的辦法,不過前提是***行必須是作為字段名或者***行的數(shù)據(jù)類型就為字符型。這樣一說,大家就明白了。首先修改連接字符串為:
view source print ? //2003(Microsoft.Jet.Oledb.4.0) string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath); //2010(Microsoft.ACE.OLEDB.12.0) string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath);
這里將HDR設(shè)為NO,因為我就是將***行做為數(shù)據(jù)讀取,而IMEX=1就表示根據(jù)前8行判斷列的數(shù)據(jù)類型,如果有字符型數(shù)據(jù),那么就強制混合數(shù)據(jù)轉(zhuǎn)換為 文本。這里就明白為什么要保證***行為字符型的原因了。能將列的數(shù)據(jù)類型強制設(shè)為字符型,那么列中出現(xiàn)什么類型的數(shù)據(jù)都不怕了。需要做的工作就是,在獲取 完數(shù)據(jù)后,將字段名重新設(shè)置,并刪除***條記錄即可。代碼如下:
view source print ? 01. DataTable dt = new DataTable(); 02. 03. using(OleDbCommand cmd = new OleDbCommand()){ 04. cmd.Connection = conn; 05. cmd.CommandType = CommandType.Text; 06. cmd.CommandTimeout = 6; 07. cmd.CommandText = string.Format("select * from [{0}$]", sheetName); 08. 09. OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 10. adapter.Fill(dt); 11. } 12. 13. if (dt.Rows.Count > 0) { 14. DataRow dr = dt.Rows[0]; 15. 16. for (int col = 0; col < dt.Columns.Count; col++) { 17. dt.Columns[col].ColumnName = dr[col].ToString(); 18. } 19. 20. dt.Rows[0].Delete(); 21. dt.AcceptChanges(); 22. }
到此,相信大家對“如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章名稱:如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article32/gophsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、網(wǎng)站策劃、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作、用戶體驗、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)