【发布时间】:2020-05-27 16:08:10
【问题描述】:
目前,我有一个程序使用 OleDb 从 Excel 工作表中获取数据并使用实体框架将其导入 SQL Server 数据库。
在弥合 OleDb 和 EF 之间的差距时,我将 Excel 工作表中的数据推送到 DataTable,进入 DataTable 以获取单行中的所有数据,将其放入 StringBuilder 分隔用逗号,然后将 StringBuilder 对象转换为用逗号分隔的字符串数组。然后,我调用Add 函数使用EF 将数据导入数据库。
在下面显示的代码中,你可以看到我必须调用
Name = data[0], Message = data[1]
等将数据推送到数据库中。有没有办法可以将字符串数组传递给类而不是每个单独的参数并在那里处理数据?
public static void Insert(string Sheet, OleDbConnection conn)
{
OleDbCommand command = new OleDbCommand("SELECT Name, Message, Message type FROM [" + Sheet + "$]", conn); //Selects everything inside excel file
DataTable Data = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
adapter.Fill(Data); //Puts all data inside a DataSet
StringBuilder sb = new StringBuilder();
var context = new DataWarehouseContext();
// Prints out DataSet
foreach (DataRow dataRow in Data.Rows)
{
foreach (var item in dataRow.ItemArray)
{
sb.Append(item);
sb.Append(",");
}
string[] data = sb.ToString().Split(','); //Gets data for each item in vHealth Insert method
context.RvtoolsVHealth.Add(new RvtoolsVHealth { Name = data[0], Message = data[1], MessageType = data[2] });
context.SaveChanges();
}
}
任何指针都会很棒,谢谢!
【问题讨论】:
-
CSV 似乎完全没有必要。您已经在遍历数据行,为什么不在创建 RVtoolsHealth 对象时直接访问列?名称 = 数据行 [“名称”]。见stackoverflow.com/questions/7119993/…。 Linq 适用于数据表,因此您可以直接选择 RvtoolsVHealth 对象列表,然后对您的上下文执行 AddMany。
标签: c# .net class entity-framework-core oledb