自定义 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 等的好问题。
我需要创建一个方法来获取上传的 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 等的好问题。