【问题标题】:How to import excel to sql server with some column values transforming into row using asp.net?如何使用asp.net将某些列值转换为行的excel导入sql server?
【发布时间】: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


    【解决方案1】:

    您需要更精确地确定您想要实现的目标。你是在 C# 还是 VB.Net 中工作?用户会从网页上传文件吗?到目前为止,您尝试过什么?

    使用 ASP.NET 将 Excel 文件导入 SQL Server 的一种方法是使用 FileUpload 将文件上传到您的服务器。然后,用户将能够选择他想要导入的文件。

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

    现在您的数据已在数据表中,您将能够进行所需的操作。

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

    请更新您的问题,提供更多信息以及您迄今为止所做的尝试,以便我们为您提供更具体的答案。

    【讨论】:

    • 嗨 Fynnen,感谢您的帮助。我已经用输出格式(图片链接)更新了问题,请检查一次。
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多