从Excel文件导出数据到SQL server数据库的最佳方法
本文关键字:数据库 server 最佳 方法 SQL 文件 Excel 数据 | 更新日期: 2023-09-27 18:18:05
我有一个已经打开的Excel文件。我想写一个c#代码,可以导出该文件的数据到SQL Server数据库表,而不给出打开文件的路径。
Excel.Application sourceApp;
sourceApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
sourceApp.Visible = true;
Excel.Workbook sourceWorkBook = sourceApp.ActiveWorkbook;
Excel.Worksheet sourceWorkSheet = sourceWorkBook.ActiveSheet;
Excel.Range sourceRange = sourceWorkSheet.UsedRange;
这是我用来打开Excel文件的代码。
如何连接到数据库,并以适当的方式导入它?
这实际上取决于许多因素,但是您可以创建一个Datatable
,将值映射到SQL表,然后批量插入Datatable到表中。下面是这段代码的通用片段。
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"对象