Мне нужна загрузка данных из файла 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();
}