2010-03-15 64 views
1

我收到一個奇怪的問題。我使用OLEDB與Excel連接 連接字符串= Provider = Microsoft.Jet.OLEDB.4.0; Data Source = c:\ Execute.xls; Extended Properties = Excel 8.0;「);OLEDB連接不從excel表讀取數據

excel文件包含列字符串/整數值。 的問題是,有時連接讀取表值是絕對好的,但有時它錯過了一些數據值,並將其顯示爲System.DBNull。 的行爲很不一致。 請幫助。

回答

1

我首先猜測是檢查你的區域參數,數字格式會因區域設置而不同,這可能會導致問題,儘管Excel應該管理它。或者你會自動執行,有時候它不會像它那樣困惑或者其他東西,然後渲染一些奇怪的數據,比如那些DBNull值。

0

這是你的問題。 IIRC,驅動程序只讀取前8行數據並根據該數據確定列的數據類型。

因此,假設在列1的前8行中只有數字。驅動程序將決定該列是一個整數。然後,如果它在第9行中遇到一個字符串,它將無法將其轉換爲整數,因此將DBNull返回給您。

有幾件事你可以做。

  • 程序前您的電子表格,並轉換一切爲字符串
  • 有一個註冊表項(所在地逃脫我的那一刻),它允許你以增加驅動程序使用,以確定數據行數類型。
  • 使用商業Excel的讀者掌握
  • 打開通過Excel互操作庫中的表和讀取的單元上自己
+0

感謝您的答覆。 現在我已將列類型從「常規」更改爲「文本」。但仍然存在相同的問題..它仍然沒有采取數值,並顯示它們爲System.DB空...有沒有解決方案嗎? – Pooja 2010-03-15 13:41:32

2
+0

我也有一個看似混合的數字/文本數據類型的列,我只是想將其視爲文本。使它適用於我的原因是將IMEX = 1添加到連接字符串中的選項。 – 2011-05-24 14:06:32

0

使用此代碼

string pathcpnn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + textBox1.Text + ";Extended Properties=\""Excel 8.0;HDR=Yes;IMEX=1;";"; 

OleDbConnection con = new OleDbConnection(pathcpnn); 

OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from[" + textBox2.Text + "$]", con); 

myDataAdapter.Fill(dt); 

DAtagridview1.datasource=dt;