它确实取决于很多因素,但是您可以创建一个Datatable
,将值映射到SQL表,然后将数据表批量插入到表中。下面是这段代码的通用片段。
public static void insertToDB(List<YourModel> list)
{
DataTable table = new DataTable("table");
DataColumn colA = new DataColumn("Column_A", Type.GetType("System.String"));
table.Columns.Add(colA);
DataColumn colB = new DataColumn("Column_B", Type.GetType("System.DateTime"));
table.Columns.Add(colB);
DataColumn colC = new DataColumn("Column_C", Type.GetType("System.TimeSpan"));
table.Columns.Add(colC);
DataColumn colD = new DataColumn("Column_D", Type.GetType("System.Int32"));
table.Columns.Add(colD);
foreach (var item in list)
{
DataRow newRow = table.NewRow();
newRow["Column_A"] = item.colA == null ? DBNull.Value : (object)item.Celda_Destino;
newRow["Column_B"] = item.colB == null ? DBNull.Value : (object)item.Celda_Origen; ;
newRow["Column_C"] = item.colC == null ? DBNull.Value : (object)item.Celda_Destino;
newRow["Column_D"] = item.colD;
table.Rows.Add(newRow);
}
using (SqlConnection conn = new SqlConnection("YOUR CONNECTION STRING"))
{
conn.Open();
using (SqlBulkCopy s = new SqlBulkCopy(conn))
{
s.DestinationTableName = table.TableName;
foreach (DataColumn dc in table.Columns)
{
s.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
}
}
}
根据您的Excel文件,你将不得不实现逻辑用于获取列表以“YourModel”对象
就像你在你的最终sentece说,你的意思是进口不受出口,而且有太多如果数据太多,可以使用批量插入插入来代替,然后执行插入操作。 –
@AlexKrups其实我是为vba应用程序实现这个程序。我将它用作库,并将其附加到vba代码。我不使用VBA的原因是 - VBA缺乏版本控制,这是该程序的主要要求。 –
@JuanRuizdeCastilla是的我正在考虑目前的批量插入,但我面临的主要问题是连接excel到数据库而不提供文件的路径,因为我想从一个已经打开的excel表导出数据到数据库(活动之一)和也从数据库导入到当前打开的excel表单中(再次激活一个) –