c#
  • csv
  • 2010-05-07 125 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]; 
         } 
    

    希望它可以帮助:-)

    相关问题