2017-02-17 29 views
0

我正在使用以下代码将数据从excel导出到使用ASP.NET的SQL中。使用ASP.NET通过跳过n行将数据导入到SQL中使用ASP.NET

protected void Upload(object sender, EventArgs e) 
{ 
    //Upload and save the file 
    string excelPath = Server.MapPath("~/Files") + Path.GetFileName(FileUpload1.PostedFile.FileName); 
    FileUpload1.SaveAs(excelPath); 

    string conString = string.Empty; 
    string extension = Path.GetExtension(FileUpload1.PostedFile.FileName); 
    switch (extension) 
    { 
     case ".xls": //Excel 97-03 
      conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString; 
      break; 
     case ".xlsx": //Excel 07 or higher 
      conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString; 
      break; 
    } 
    conString = string.Format(conString, excelPath); 
    using (OleDbConnection excel_con = new OleDbConnection(conString)) 
    { 
     excel_con.Open(); 
     string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString(); 
     DataTable dtExcelData = new DataTable(); 

     //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default. 
     dtExcelData.Columns.AddRange(new DataColumn[3] 
     { 
      new DataColumn("ID", typeof(string)), 
      new DataColumn("Name", typeof(DateTime)), 
      new DataColumn("Designation",typeof(DateTime))}); 

     using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) 
     { 
      oda.Fill(dtExcelData); 
     } 
     excel_con.Close(); 

     string consString = ConfigurationManager.ConnectionStrings["TestConnection"].ConnectionString; 
     using (SqlConnection con = new SqlConnection(consString)) 
     { 
      using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con)) 
      { 

       //Set the database table name 
       sqlBulkCopy.DestinationTableName = "dbo.Employee"; 

       //[OPTIONAL]: Map the Excel columns with that of the database table 
       sqlBulkCopy.ColumnMappings.Add("ID", "ID"); 
       sqlBulkCopy.ColumnMappings.Add("Name", "Name"); 
       sqlBulkCopy.ColumnMappings.Add("Designation", "Designation"); 

       con.Open(); 
       sqlBulkCopy.WriteToServer(dtExcelData); 
       con.Close(); 
      } 
     } 
    } 
} 

的问题是,在我的Excel文件中的实际数据是从第7行 开头,所以它不工作,但每当我将数据移动到第1行其取出并uploades在SQL数据就好了。 所以我想要的是在我的代码中预先定义在Excel文件中从第7行中选择数据。 另外一个查询,我的SQL和Excel工作表的标题名称是不同的,所以除非两个标题都是相同的,否则它不会选择数据,所以是否有可以保持标题不同并仍然获取数据? 请帮忙,因为我真的被困在这里。

+0

http://stackoverflow.com/questions/9713048/skip-first-row-in-read-of-excel-file – Kostis

回答

0

您需要让excel知道从查询中获取数据的位置,请尝试如下所示。

更改该行:

OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con)) 

这样:

OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "$" + "A7:ZZ]", excel_con)) 

改变细胞&行参数,以满足您的要求......

希望这有助于。

+0

它的工作,谢谢吨 –

相关问题