Прочитайте загруженный файл .csv, используя asp.net c # - PullRequest
2 голосов
/ 06 октября 2011

Я хотел бы знать, как прочитать CSV-файл, который был загружен элементом управления. Я пытался использовать OLEDB, но я получил исключение. Кое-что о том, что файл только для чтения. Любая помощь приветствуется. Спасибо

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

Вы можете попробовать библиотеку FileHelpers .
Вот пример использования с элементом управления 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 голосов
/ 06 октября 2011

Я использовал Fast CSV reader пару раз, и это действительно быстро.Это то, что я использую, когда сталкиваюсь с файлами CSV.

Удачи GJ

0 голосов
/ 06 октября 2011

Не зная конкретной ошибки, которую вы получаете, или того, что вы пытались, я использовал что-то вроде следующего, чтобы прочитать файл 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();
}
...