自定义csv文件上传

时间:2015-01-19 23:17:10

标签: c# csv

我需要创建一个获取上传的csv文件的方法,并从文件中添加数据并将其添加到表中。

我正在使用C#和InterBase。

我遇到的问题 - 一些用户可以上传不同格式的csv(因此我无法创建硬编码类)。有10列,其中4列是强制性的。用户可以上传4列或更多列的文件。所以我需要将文件中列的名称与表中的列相匹配。有没有简单的方法呢?

1 个答案:

答案 0 :(得分:0)

是的,这可以很容易地完成。您可以选择从头开始或利用现有工具进行此操作。基本上,您需要将CSV中的数据读入DataTable或自定义对象。然后,您可以将该表或对象写入数据库。

我建议你看看CSV助手 - https://github.com/JoshClose/CsvHelper

CSV Helper应该执行您需要执行的所有操作,但写入InterBase除外。除非必须,否则尽量避免重新发明轮子。

但是,如果你真的想从头开始自己编写,你可以这样做。通常,我的第一步是将CSV文件中的数据加载到DataTable中。然后我创建自定义对象并构建它们的列表。这是因为我通常已经有了将自定义对象写入数据库/最终目标的方法。

从DataTable到您的对象的列的映射应该不难,因为您可以通过其名称引用列。这是一个非常基本的例子:

class Program
{
    static void Main(string[] args)
    {
        DataTable CarsImportedFromFile = new DataTable();
        // load data in from CSV
        List<Car> Cars = new List<Car>();

        foreach (DataRow CurrentRow in CarsImportedFromFile.Rows)
        {
            Car MyCar = new Car();
            MyCar.Model = CurrentRow["Model"].ToString();
            MyCar.Color = CurrentRow["Color"].ToString();
            Cars.Add(MyCar);
        }
    }
}

class Car
{
    public string Model { get; set; }
    public string Color { get; set; }
}

有很多方法可以做所有这些事情。如果搜索SO,您可以找到关于动态映射,数据到对象转换,导入CSV等的好问题。