【发布时间】:2015-09-13 09:23:28
【问题描述】:
我想使用带有 C# 的 asp.net 将 excel 文件导入到 sql server。
用户使用文件上传控件从网页上传文件。
这里是代码。
这里我使用了外部应用来将列转换为行。
当我运行代码时出现以下错误。
IErrorInfo.GetDescription 失败,出现 E_FAIL(0x80004005)。
protected void BtnUpload_Click(object sender, EventArgs e)
{
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();
string st = “Select [sno], [Id],[country],[Qtr]=case(substring([Qtr],1,2) as nvarchar(4)), [value] from [“+sheet1+”] outer apply(values((N'Q1',Q1),(N'Q2',Q2)) P(Qtr,value)”;
using (OleDbDataAdapter oda = new OleDbDataAdapter(st, excel_con))
{
oda.Fill(dtExcelData);
}
excel_con.Close();
string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(consString))
{
using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
{
//Set the database table name
sqlBulkCopy.DestinationTableName = "[dbo].[exceldemo]";
con.Open();
sqlBulkCopy.WriteToServer(dtExcelData);
con.Close();
lblUpload.Text = "Uploaded Succesfully";
}
以下是格式。请检查一下。
http://i61.tinypic.com/217pk0.jpg
我也尝试过使用 UNPIVOT。
如果上面的代码有什么问题,请告诉我,并给出解决这个问题的建议。
非常感谢您。
【问题讨论】:
标签: asp.net excel upload sql-server-2012