我需要创建一个获取上传的csv文件的方法,并从文件中添加数据并将其添加到表中。
我正在使用C#和InterBase。
我遇到的问题 - 一些用户可以上传不同格式的csv(因此我无法创建硬编码类)。有10列,其中4列是强制性的。用户可以上传4列或更多列的文件。所以我需要将文件中列的名称与表中的列相匹配。有没有简单的方法呢?
答案 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等的好问题。