c#
  • csv
  • 2010-05-07 161 views 0 likes 
    0

    我在閱讀csv文件並創建數據集。如何使用C#讀取CSV文件

    string MyPath = System.IO.Path.GetDirectoryName(Filename); 
    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MyPath + ";Extended Properties='text;HDR=Yes;FMT=Delimited'"; 
    //string CmdText = "select * from JDL-NurseryParts" + System.IO.Path.GetFileName(Filename); 
    string CmdText = "select * from ABC"; 
    OleDbConnection Con = new OleDbConnection(ConnectionString); 
    OleDbDataAdapter adptr = new OleDbDataAdapter(CmdText, Con); 
    DataSet Ds = new DataSet(); 
    adptr.Fill(Ds); 
    return Ds; 
    

    我收到錯誤「附近的語法錯誤」。當我打開該csv文件時,它包含工作表。

    文件名 - ABC

    Workedsheet名稱 - ABC

    我使用C#

    +0

    安裝了Excel的Windows將使用excel打開.CSV文件。 – kenny 2010-05-07 10:49:16

    回答

    2

    在我當前的項目,我用File Helpers,我並不失望!

    編輯:作爲一個簡單的例子,這裏是我正在使用的一個類。一切與屬性一起工作。 (樣品爲在VB.Net,但你的想法)

    <DelimitedRecord(";")> _ 
    <IgnoreFirst(1)> _ 
    <IgnoreEmptyLines()> _ 
    Public Class ClientsClass    
        <FieldConverter(ConverterKind.Date, "dd/M/yyyy"), FieldQuoted(QuoteMode.OptionalForBoth)> Public DateField As Date 
        <FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public ClientCountry As String 
        <FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public AccountId As String 
        <FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public Name As String 
        <FieldTrim(TrimMode.Both), FieldQuoted(QuoteMode.OptionalForBoth)> Public FNumber As String 
    End Class 
    

    因此,基本上,你創建一個類,其中每個字段在CVS文件中的字段(爲了此事所做的),然後你添加將告訴必須對該字段應用什麼處理的屬性(如修剪,轉換等)。您還可以添加類屬性,如<DelimitedRecord(";")>,該屬性指示文件中使用哪個分隔符,或IgnoreFirst(1),它指示引擎不解析第一行。每個屬性都在他們的文檔中進行了解釋,並且網站上有很多示例供您學習。

    然後,分析文件的類是很容易的:

    Dim filePath as string = "Path to your file.csv" 
    Dim fhe As New FileHelperEngine(Of ClientsClass) 
    Dim vals as ClientClass() = CType(fhe.ReadFile(filePath), ClientClass()) 
    

    ,你會得到包含每解析線1個ClientClass對象的數組。

    請注意,他們還建立了一個工具,可以幫助您創建您的課程,可以在他們的網站上下載。

    +0

    +1:我也用過。它真的很棒 – Amitabh 2010-05-07 10:58:33

    0

    我想你的CmdText字符串可能有問題。嘗試

    string CmdText = "SELECT * FROM [" + System.IO.Path.GetDirectoryName(Filename) + "]"; 
    

    我用下面的類來讀取CSV文件,並且它似乎運作良好(返回DataTable,但你可以很容易地返回一個DataSet:

      public System.Data.DataTable GetDataTable(string strFileName) 
         { 
          System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(strFileName) + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\""); 
          conn.Open(); 
          string strQuery = "SELECT * FROM [" + System.IO.Path.GetFileName(strFileName) + "]"; 
          System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn); 
          System.Data.DataSet ds = new System.Data.DataSet("CSV File"); 
          adapter.Fill(ds); 
          return ds.Tables[0]; 
         } 
    

    希望它可以幫助:-)

    相關問題