2013-11-11 2 views
0

Мне нужна загрузка данных из файла Excel в базу данных SQL Server. Файл Excel создается путем загрузки данных из веб-приложения в набор данных. Данные извлекаются из таблицы в базе данных SQL Server для генерации Excel. Когда я попытался загрузить этот же файл Excel в ту же таблицу, он не работает.Как программно (C#) импорт из файла Xls-XML (файл xls, сохраненного в формате XML) в SQL Server

HResult=-2147467259 Message=Could not find installable ISAM. 
Source=Microsoft JET Database Engine ErrorCode=-2147467259 

Формат файла и расширение 'Report.xls' не соответствуют файлу, не могут быть повреждены или небезопасны. Если вы не доверяете его источнику, не открывайте его. Вы все равно хотите его открыть?

Вот код, чтобы сохранить данные в базу данных

 private void SaveFileToDatabase(string filePath) 
     { 
      String fileExtension = Path.GetExtension(filePath); 
      String excelConnString = string.Empty; 

      //Create connection string to Excel work book 
      if (fileExtension == ".xls") 
      { 
       excelConnString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1""", filePath); 
       //String excelConnString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties="Excel 8.0;HDR=Yes;IMEX=1""", filePath); 
      } 
      else 
      { 
       excelConnString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0""", filePath); 
      } 

      //Connection to Excel work book 
      using (OleDbConnection excelConnection = new OleDbConnection(excelConnString)) 
      { 
       //OleDbCommand to fetch data from Excel 
       using (OleDbCommand cmd = new OleDbCommand("Select * from [working$]", excelConnection)) 
       { 
        excelConnection.Open(); 
        using (OleDbDataReader dReader = cmd.ExecuteReader()) 
        { 
         using (SqlBulkCopy sqlBulk = new SqlBulkCopy(connect)) 
         { 
          DBUtilities.RunSQLCommand("truncate table dbo.[DatabaseTable]"); 

          //Destination table in db 
          sqlBulk.DestinationTableName = " DatabaseTable "; 
          sqlBulk.WriteToServer(dReader); 
         } 
        } 
      } 
     } 
     } 

код для создания файла Excel из данных, приведенных в таблице

private void ExportDataToExcel(String sprocCommand, String workBookName) 
    { 
     try 
     { 
      string attachment = "attachment; filename=report.xls"; 

      Response.Clear(); 
      Response.Buffer = true; 
      Response.Charset = string.Empty; 
      Response.AddHeader("cache-control", "private"); 
      Response.AddHeader("Content-disposition", attachment); 
      //Response.AddHeader("Content-type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
      Response.ContentType = "application/vnd.xls"; 
      EnableViewState = false; 

      DataTable dt = DBUtilities.GetData(); 
      DataView dv = dt.DefaultView; 

      dt = null; 
      dt = dv.ToTable(); 

      Response.Write(SendExcelXMLFormat(dt, workBookName)); 

      Response.End(); 
     } 
     catch (Exception Ex) 
     { 
      ////TOOD 
     } 
    } 

    private string SendExcelXMLFormat(DataTable dTable, string WorkSheetName) 
    { 
     StringBuilder sb = new StringBuilder(); 

     sb.AppendLine("<?xml version=\"1.0\"?> "); 
     sb.AppendLine("<?mso-application progid=\"Excel.Sheet\"?> "); 
     sb.AppendLine("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" "); 
     sb.AppendLine("xmlns:o=\"urn:schemas-microsoft-com:office:office\" "); 
     sb.AppendLine("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" "); 
     sb.AppendLine("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" "); 
     sb.AppendLine("xmlns:html=\"http://www.w3.org/TR/REC-html40\"> "); 
     sb.AppendLine("<Styles> "); 
     sb.AppendLine("<Style ss:ID=\"s41\" ss:Name=\"60% - Accent1\"> "); 
     sb.AppendLine("<Font ss:FontName=\"Calibri\" x:Family=\"Swiss\" ss:Size=\"11\" ss:Color=\"#FFFFFF\"/> "); 
     sb.AppendLine("<Interior ss:Color=\"#95B3D7\" ss:Pattern=\"Solid\"/> "); 
     sb.AppendLine("</Style> "); 
     sb.AppendLine("</Styles> "); 
     sb.AppendLine("<Worksheet ss:Name=\"" + WorkSheetName+"\"> "); 
     sb.AppendLine("<Table>"); 

     // Header Row 
     sb.AppendLine("<Row ss:AutoFitHeight=\"0\"> "); 
     foreach (DataColumn dc in dTable.Columns) 
     { 
      sb.AppendLine("<Cell ss:StyleID=\"s41\"><Data ss:Type=\"String\">" + dc.ColumnName + "</Data></Cell> "); 
     } 
     sb.AppendLine("</Row> "); 

     // Data Rows 
     foreach (DataRow row in dTable.Rows) 
     { 
      sb.AppendLine("<Row ss:AutoFitHeight=\"0\"> "); 
      for (int i = 0; i < dTable.Columns.Count; i++) 
      { 
       sb.AppendLine("<Cell><Data ss:Type=\"String\">" + Server.HtmlEncode(row[i].ToString()) + "</Data></Cell> "); 
      } 
      sb.AppendLine("</Row> "); 
     } 

     sb.AppendLine("</Table> "); 
     sb.AppendLine("</Worksheet> "); 
     sb.AppendLine("</Workbook> "); 

     return sb.ToString(); 
    } 

ответ

1

Если вы хотите сохранить данные из Excel в SQL Server означает, обратитесь эту ссылку

http://www.codeproject.com/Tips/593181/Load-GridView-from-Excel

здесь я загрузил gridview из excel, а также скопировал содержимое excel на SQL Server с помощью SQLBulkCopy(). Примечание: вы также можете получить отдельную строку из gridview и вставить в базу данных.

взглянуть на это может помочь.

Смежные вопросы