2015-10-16 174 views
0

我有一个已经打开的Excel文件。我想编写C#代码,可以将该文件的数据导出到SQL Server数据库表中,而无需提供该打开文件的路径。将数据从Excel文件导出到SQL服务器数据库的最佳方法

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文件的代码。

如何将其连接到数据库并以适当的方式导入它?

+0

就像你在你的最终sentece说,你的意思是进口不受出口,而且有太多如果数据太多,可以使用批量插入插入来代替,然后执行插入操作。 –

+0

@AlexKrups其实我是为vba应用程序实现这个程序。我将它用作库,并将其附加到vba代码。我不使用VBA的原因是 - VBA缺乏版本控制,这是该程序的主要要求。 –

+0

@JuanRuizdeCastilla是的我正在考虑目前的批量插入,但我面临的主要问题是连接excel到数据库而不提供文件的路径,因为我想从一个已经打开的excel表导出数据到数据库(活动之一)和也从数据库导入到当前打开的excel表单中(再次激活一个) –

回答

0

它确实取决于很多因素,但是您可以创建一个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”对象

相关问题