2011-12-30 144 views
4

我有一個C#winforms正在從csv文件讀取一列。它讀取正確的4列中的3個。 csv文件中的第4列是S4,但數據集正在顯示4在C#winforms中讀取csv文件時出現數據錯誤

的代碼是:

string conn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data" 
      + "Source={0}; Extended Properties=""text;HDR=YES;FMT=DELIMITED""", 
       strDirectoryPath); 

OleDbConnection oleDBConn = new OleDbConnection(conn); 
oleDBConn.Open(); 

OleDbDataAdapter da = new OleDbDataAdapter("Select * FROM [" + strFileName + "]", 
              conn); 
DataSet ds = new DataSet(); 
da.Fill(ds); 

CSV數據樣本是:

AA0013 Incident Incident S4 
AA0016 Incident Incident S3 
AA0017 Incident Incident S3 
AA0023 Incident Incident S3 
AA0076 Issue  Issue  S3 
AA0079 Incident Incident S6 
AA0082 Issue  Issue  S6 
AA0084 Incident Incident S6 
AA0085 Incident Incident S6 

什麼會導致這一點,我怎麼能解決這個問題?

+3

你能提供一些CSV樣本行嗎? – user1231231412 2011-12-30 19:27:03

+0

這裏有一篇文章討論如何配置schema.ini文件來使用OleDb的東西與CSV,特別是分隔符。 http://weblogs.asp.net/fmarguerie/archive/2003/10/01/29964.aspx – user1231231412 2011-12-30 19:34:38

+0

我很確定這樣的事情不應該要求註冊表修改。特別是由於第3排正在準確回收 – user1111955 2011-12-30 19:39:11

回答

2

這是因爲有時OLEDB提供程序會自動檢測列的數據類型,並嘗試將該列中的所有值轉換爲它檢測到的特定數據類型。要解決此問題,您需要指定schema.ini文件,該文件將包含有關每列和其數據類型的信息,以便OLEDB不嘗試將任何列隱式轉換爲其自己喜歡的數據類型:)...

此處是完整指南.. http://www.aspdotnetcodes.com/Importing_CSV_Database_Schema.ini.aspx

問候。

+0

令人難以置信......但schema.ini做到了。 – user1111955 2011-12-30 20:54:25

1

最簡單的方法是手動解析文件,而不使用數據庫連接。

string[] lines = File.ReadAllLines(path); 

    foreach(string row in lines) 
    { 
     string[] data = row.Split(","); 
     //Data processing goes here 
    } 

注意「」被數據定界符,則可以使用其它的分隔符,如‘’或‘;’

+0

它實際上是一個excel文件,它有一個csv文件擴展名 – user1111955 2011-12-30 20:53:41