如何使用asp.net将excel导入sql server并将一些列值转换为行?

时间:2015-06-26 12:12:45

标签: asp.net excel upload sql-server-2012

我想使用带有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。

请告诉我上述代码中是否有任何错误,并提出解决此问题的建议。

非常感谢你。

1 个答案:

答案 0 :(得分:0)

您需要更准确地了解您想要达到的目标。你在C#或VB.Net工作吗?用户是否会从网页上传文件?到目前为止你尝试了什么?

使用ASP.NET将Excel文件导入SQL Server的一种方法是使用FileUpload将文件上载到服务器。然后,用户可以选择要导入的文件。

然后,您将需要读取该Excel文件中的数据并将其放入Datatable中。它将使您能够在代码中使用它。以下是如何从Excel文件(http://www.codeproject.com/Tips/509179/Read-Excel-File-into-DataSet-in-ASP-NET-Using-Csha)读取数据的一个很好的示例。它类似于读取数据库,但是您连接到Excel文件。

既然您的数据在数据表中,您就可以进行所需的操作。

之后,您可以通过多种不同方式将数据写入SQL Server,具体取决于您对数据库的写入方式。 ADO,NHibernate,EF,存储过程,动态SQL?你也可以做一个BulkCopy。它会将数据表中的所有数据复制到数据库中,而无需遍历数据表的所有行。您需要映射列并确保正确格式化数据表。 (https://msdn.microsoft.com/en-us/library/ex21zs8x(v=vs.110).aspx

请更新您的问题,了解更多信息以及您目前所尝试的内容,以便我们为您提供更具体的答案。