2011-10-06 46 views
1

我想知道如何读取已被控件上传的csv文件。我试过使用OLEDB,但我得到一个例外。有关该文件是只读的。任何帮助表示赞赏。谢谢使用asp.net读取上传的.csv文件c#

+2

如果粘贴整个异常消息和堆栈跟踪你可能会得到更多的帮助。如果你粘贴你使用的代码,甚至会有更多的帮助。 –

回答

1

你可以试试FileHelpers library
下面是关于使用一个FileUpload控件的例子:

[DelimitedRecord(",")] // comma separated values 
[IgnoreFirst(1)]  // first line is assumed to be the header 
[IgnoreEmptyLines]  // ignore empty lines 
class MyClass { 

    [FieldTrim(TrimMode.Both)] 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string FirstName; 

    [FieldTrim(TrimMode.Both)] 
    [FieldQuoted('"', QuoteMode.OptionalForBoth)] 
    public string LastName; 
} 

protected void Button1_Click(object sender, EventArgs e) { 
    if (!FileUpload1.HasFile) { 
     // No CSV file selected 
     return 
    } 
    using (StreamReader sr = new StreamReader(FileUpload1.PostedFile.InputStream)) { 
     FileHelperEngine engine = new FileHelperEngine(typeof(MyClass)); 
     foreach (MyClass entry in engine.ReadStream(sr)) { 
      // do something 
     } 
    } 
} 
+0

而MyClass是? – Johan

+0

MyClass是您想要解析您的csv文件的数据结构。 –

+0

+1帮助了我。这是很好的答案 – Pankaj

0

不知道你所得到的特定错误,或者你已经试过什么,我用类似以下读取CSV文件与OLEDB

string sCSVConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + PATHTOFILE + @";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';"; 

using (OleDbConnection connection = new OleDbConnection(sCSVConnectionString)) 
{ 
    connection.ConnectionString = sCSVConnectionString; 
    connection.Open(); 

    using (DbCommand command = connection.CreateCommand()) 
    { 
     command.CommandText = "SELECT * FROM [" + FILENAME + "]"; 

     using (DbDataReader dr = command.ExecuteReader()) 
     { 
      while (dr.Read()) 
      { 
       // do something with the DataReader dr here. 
      } 

      dr.Close(); 
     } 
    } 

    connection.Close(); 
} 
0

我已经使用了Fast CSV reader几次,它确实很快。这是我在面对CSV文件时使用的。

好运GJ