利用OleDb匯入Excel資料丟失問題及解決方法

2021-06-18 03:34:29 字數 827 閱讀 3066

在開發的應用中,對於excel資料匯入,一直都利用oledb,以前都收到使用者反饋有啥問題。但這幾天搞乙個專案,也用到了這個東西,還在測試階段就發現出了問題:經常會出現某一字段不允許有空值。按常規的認識,肯定是該行中某列的資料沒有填寫,但檢測excel表,並未發現有此情況。然後就是各種折騰,最終發現是該單元格被莫名置為空值了。

所以開始一直懷疑是excel表或程式有問題,實際是方向不對,從網上搜到一篇文字才明白原來是驅動的問題。

excel讀取資料的驅動程式被限制為索引順序訪問方法,即先檢查前幾行的實際值以確定資料型別,比如前幾行都是數字,那就被確認為數值型,後面如果是字元,就會被忽略。比如某列是產品編碼,前幾行剛好是數字,但後面有字母,結果錯誤地被認為是數值型而後面的內容就沒有了。知道這些不禁出了一身冷汗,以前根本沒注意到這個問題,是不是有好多應用中使用者在匯入資料的時候被忽略了呢。

趕緊找到解決方案吧。

這是oledb連線字串:

provider=microsoft.jet.oledb.4.0;data source=;extended properties='excel 8.0;hdr=yes;imex=1;

hdr=yes表示首行是標題,imex=1,這句是關鍵,用於指定驅動程式使用檔案的格式,有三個選擇:0,1,2,分別代表匯出、匯入、混合模式,所以這裡選1。

但僅僅這個還不夠,還需要更改伺服器中登錄檔的設定,具體位置是:

hkey_local_machine\software\microsoft\jet\4.0\engines\excel

找到typeguessrows,該值預設為8,表示驅動程式取前8行做為取樣,這裡可改為0,應該就是不取樣了。

經測試,問題解決了。

使用OleDb,將Excel匯入DataSet

本方法,將傳入的excel檔案內所有的sheet內的資料都填充入dataset中。這是乙個簡單快捷的方法,不足之處是不適合帶有格式複雜的excel檔案。比如 有合併單元格的 public class excelutil extended properties excel 8.0 if firstro...

使用OleDb,將Excel匯入DataSet

本方法,將傳入的excel檔案內所有的sheet內的資料都填充入dataset中。這是乙個簡單快捷的方法,不足之處是不適合帶有格式複雜的excel檔案。using system.data using system.data.oledb using system.data.odbc public da...

利用反射實現EXCEL匯入

業務需求是這樣的 1.客戶需要匯入excel檔案 2.excel檔案中有4個sheet 3.每個sheet名與其sheet內的欄位名是固定的 想實現,將4個sheet匯入資料庫中 我的實現是 1.定義介面 public inte ce iresource 2.定義sheet物件 public cla...