2015-04-08 57 views
0

我想讀取製表符分隔的Excel .csv文件。每列有8列混合數據。我會張貼輸出的圖片,但是我沒有足夠的聲望去做(這是我的第一篇文章,所以請耐心等待)。實質上,輸出表dt只包含帶有亂序列標題的單個列。C# - 使用Microsoft Jet OLEDB讀取製表符分隔文件時遇到問題

這裏是我使用的代碼:

從App.config中:

<add key="cnProvider" value="Microsoft.Jet.OLEDB.4.0"/> 
<add key="cnProperties" value="&quot;text;HDR=Yes;FMT=TabDelimited;CharacterSet=65001&quot;"/> 

從Program.cs的:

string sqlStatement_1 = ConfigurationSettings.AppSettings["sqlStatement_1"]; 
string cnProperties = ConfigurationSettings.AppSettings["cnProperties"]; 
string cnStr = "Provider=" + cnProvider + ";Data Source=" + folder + ";Extended Properties=" + cnProperties + ";"; 

OleDbDataAdapter Adp; 
Adp = new OleDbDataAdapter(sqlStatement_1, cnStr); 
using (Adp) { 
Adp.Fill(dt); 
} 

此代碼工作得很好的一個逗號分隔的文件當將FMT更改爲分隔符而不是TabDelimited時。有任何想法嗎?文件大小小於1000行,所以執行速度並不是什麼大問題。該代碼不會產生任何例外。

提前致謝!

+0

這裏是一個很好的網站,你應該看看關於如何使用OLEDB [C#的ConnectionStrings]來配置一個連接字符串(http://www.connectionstrings.com/microsoft-jet-ole-db- 4-0 /)請按照這些步驟,我很確定你會很快識別出錯的地方..也做一個谷歌搜索如何使用'Fill'方法以及如何使用'using(){} '語句也需要編輯原始問題並顯示app.Config文件中已定義此ConfigurationSettings.AppSettings [「sqlStatement_1」];「 – MethodMan

+0

」的設置的位置,您是否會遇到任何異常,如果是的話,是否可以編輯與這些問題。 – BMac

+0

當你可以在app.config文件設置中添加所有必要的屬性時,沒有必要在你的代碼中動態構建'cnStr' ..看看我之前評論中提到的connectionstring鏈接 – MethodMan

回答

2

我無法獲得JET驅動程序的工作 - 我懷疑有一些關於我的.csv文件的標準。但無論如何,這是我的解決方案,工作得很好。再次感謝所有回覆的人。

public static DataTable readCSV() 
    { 
     //create a data table and add the column's 
     DataTable table = new DataTable("table_name"); 
     int i = 0; 
     table.Columns.Add("city", typeof(String)); 
     table.Columns.Add("owner", typeof(String)); 
     table.Columns.Add("unit_number", typeof(String)); 
     table.Columns.Add("equipment_desc", typeof(String)); 
     table.Columns.Add("wo_type", typeof(String)); 
     table.Columns.Add("wo_number", typeof(String)); 
     table.Columns.Add("wo_desc", typeof(String)); 
     table.Columns.Add("wo_status", typeof(String)); 
     table.Columns.Add("days_oos", typeof(String)); 

     //start reading the textfile 
     StreamReader reader = new StreamReader(@"c:\...\...csv"); 
     string line; 
     while ((line = reader.ReadLine()) != null) 
     { 
      if (i == 0) 
      { 
       //skip headings 
      } 
      else 
      { 
       string[] items = line.Split('\t'); 
       //make sure it has 3 items 
       if (items.Length == 9) 
       { 
        DataRow row = table.NewRow(); 
        row["city"] = items[0]; 
        row["owner"] = items[1]; 
        row["unit_number"] = items[2]; 
        row["equipment_desc"] = items[3]; 
        row["wo_type"] = items[4]; 
        row["wo_number"] = items[5]; 
        row["wo_desc"] = items[6]; 
        row["wo_status"] = items[7]; 
        row["days_oos"] = items[8]; 
        table.Rows.Add(row); 
       } 
      } 
      i++; 
     } 
     reader.Close(); 
     reader.Dispose(); 

     // make use of the table 
     return table; 
    } 
+0

也許不是最好的答案,但它幫助了我。我試圖用JET和ACE讀取一個帶有<符號的csv文件。有時它有時並不奏效。當它沒有價值只是空白。 – user960914

相關問題