欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題

本篇內(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)解決該問題方法的比較:

如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題

如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題

如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題

如何用C#解決Oledb連接Excel數(shù)據(jù)類型不統(tǒng)一的問題

這里提供一個更加方便的辦法,不過前提是***行必須是作為字段名或者***行的數(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)

h5響應(yīng)式網(wǎng)站建設(shè)