2010-02-22 59 views
0

我在解析Windows Server 2008 64位版本中的* .CSV文件時遇到了一些麻煩。 Jet OLEDB 4.0不會讀取標題行中存在的問題,即CSV中顯示的問題。解析Windows Server 2008 64位版本中的CSV文件C#

這意味着,當我嘗試訪問這樣的一列:

DataTable tbl = GetCsvData(); 
string sd = tbl.Rows[0]["id"].ToString(); 

程序拋出一個異常,說,列不中確定年代的歸屬。

我用下面的代碼:

public DataTable GetCsvData() { 
     FileInfo file = new FileInfo(this.fileName); 
     string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
      "Data Source=" + file.DirectoryName + "\\;" + 
      "Extended Properties=\"text;HDR=Yes;FMT=Delimited(;)\";"; 
     OleDbConnection objConn = new OleDbConnection(connectionString); 
     objConn.Open(); 
     OleDbCommand objCmdSelect = new OleDbCommand(string.Format("SELECT * FROM [{0}]", file.Name), objConn); 
     OleDbDataAdapter adp = new OleDbDataAdapter(objCmdSelect); 
     DataTable tbl = new DataTable("CSVData"); 
     adp.Fill(tbl); 
     objConn.Close(); 
     objConn.Dispose(); 
     return tbl; 
    } 

正如你所看到的,擴展屬性是正確的:「HDR =是」,這迫使Jet引擎讀取CSV文件的標題行。

這個問題真的很奇怪,因爲我可以在開發機器上讀取同一個CSV文件(Windows XP SP3),絕對沒有問題。

我認爲這是派生到Windows服務器的64位版本的2008年

我檢查的Msjet40.dll文件的版本的服務器和本地機器上都存在問題:

Windows XP SP3 => 4.0.9551 
Windows Server 2008 64 bit => 4.0.9755 

問題不在CSV文件上,它在Microsoft提供的驅動程序中(至少是我認爲的),因爲我可以在我的機器上完美地讀取CSV文件。

是否有任何想法解決這個問題的方法?我GOOGLE了很多,但我找不到任何東西。

謝謝..

+0

你能否通過連接來自兩個系統的外部應用程序的數據來驗證它是驅動程序?例如,Excel或SQL鏈接查詢(很可能你的服務器上沒有Excel)。 – 2010-02-22 17:15:19

+0

我沒有在服務器上的Excel ...這是肯定的...我無法驗證..謝謝.. – Tio 2010-02-22 17:38:14

+1

JET驅動程序不可用在64位模式。你是否強制你的程序在32位模式下運行? – 2010-02-22 18:11:32

回答

0

你可能想看看 「Fast CSV Reader」 或 「FileHelpers library」,而不是使用JET OLEDB。

+0

我去了「快速CSV閱讀器」,它工作得很好解析器現在完美工作..謝謝... – Tio 2010-02-22 19:14:19

0

也許不是一個很好的答案,但如果它變成了驅動程序,那麼你可以通過使用http://www.filehelpers.com/來解決它。

1

我發現Jet驅動程序非常不穩定,所以我通常將CSVs作爲文本文件讀取。 CSVs很容易解析,我從不擔心驅動程序問題。

+1

不要推出自己的解決方案,有證明和測試的(見我的答案)。閱讀CSV可能比您想象的要複雜得多(請參閱我的答案中的「快速CSV閱讀器」鏈接)。 – M4N 2010-02-22 17:20:17

0

爲什麼不使用TextFieldParser這就是built into的.NET框架?

是的,它是Microsoft.VisualBasic的一部分,但它仍然是.Net的完全支持部分。

相關問題