自定义 csv 文件上传

Custom csv file upload

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

我正在使用 C# 和 InterBase。

我遇到的问题 - 一些用户可以上传不同格式的 csv(所以我无法创建硬编码 class)。有 10 列,其中 4 列是必填的。用户可以上传包含 4 列或更多列的文件。所以我需要将文件中的列名称与 table 中的列相匹配。有什么简单的方法吗?

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

我建议您看一下 CSV Helper - https://github.com/JoshClose/CsvHelper

CSV Helper 应该做您需要做的所有事情,除了写入 InterBase。除非万不得已,否则尽量避免重新发明轮子。

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

将列从 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 等的好问题。