中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用C#解決Oledb連接Excel數據類型不統一的問題

發布時間:2021-12-03 09:12:41 來源:億速云 閱讀:201 作者:iii 欄目:移動開發

本篇內容主要講解“如何用C#解決Oledb連接Excel數據類型不統一的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用C#解決Oledb連接Excel數據類型不統一的問題”吧!

在使用Microsoft.Jet.OLEDB.4.0連接Excel,進行讀取數據,相對使用傳統的COM來讀取數據,效率是很高的。但相對傳統COM操作Excel來說,及存在數據類型轉換的問題。

因為使用OLEDB連接Excel讀取數據時,需要確定數據的類型。默認情況使用連接字符串:

view source

print ?

1. string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties='Excel 8.0;'";

使用上面的連接字符串連接Excel時,可能會遇到數據類型不一致的問題。所謂數據類型不一致,是指同一列里面數據類型可能出現多種,如浮點數、字符串、日期等;當出現此類情況時,讀取出來的數據就為空,甚至會報錯,如“非法的日期格式”等異常。出現這種問題,我們大家都會想到把數據全部都按字符數據來讀取,但是按什么數據類型來讀取不是我們能控制的,是OLEDB控制的,至少暫時我還沒有找到能控制輸出數據類型的方法。因為我當初也嘗試使用convert,cast函數對輸出的列進行類型轉換,但oledb連接Excel時,使用的SQL不支持這些函數。因此只能從其他角度來解決該問題。我也在網上搜索了很多解決方法,最全面的解決方法是:http://www.douban.com/note/18510346/。下面列出了網上出現解決該問題方法的比較:

如何用C#解決Oledb連接Excel數據類型不統一的問題

如何用C#解決Oledb連接Excel數據類型不統一的問題

如何用C#解決Oledb連接Excel數據類型不統一的問題

如何用C#解決Oledb連接Excel數據類型不統一的問題

這里提供一個更加方便的辦法,不過前提是***行必須是作為字段名或者***行的數據類型就為字符型。這樣一說,大家就明白了。首先修改連接字符串為:

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設為NO,因為我就是將***行做為數據讀取,而IMEX=1就表示根據前8行判斷列的數據類型,如果有字符型數據,那么就強制混合數據轉換為 文本。這里就明白為什么要保證***行為字符型的原因了。能將列的數據類型強制設為字符型,那么列中出現什么類型的數據都不怕了。需要做的工作就是,在獲取 完數據后,將字段名重新設置,并刪除***條記錄即可。代碼如下:

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數據類型不統一的問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玉门市| 兴隆县| 静乐县| 长子县| 无极县| 波密县| 马尔康县| 大新县| 将乐县| 抚松县| 水富县| 普兰店市| 桓台县| 巍山| 郴州市| 忻城县| 巴林左旗| 淮滨县| 宜州市| 陆丰市| 西峡县| 彭州市| 区。| 荔浦县| 平原县| 闽侯县| 栾城县| 中西区| 梅州市| 余江县| 台中县| 洪雅县| 鄱阳县| 陵川县| 深圳市| 彭水| 武平县| 仲巴县| 吴江市| 海丰县| 玛纳斯县|