【问题标题】:Imported Excel sheet not sorted normally导入的 Excel 工作表未正常排序
【发布时间】:2016-02-06 16:46:20
【问题描述】:

以下代码将数据从 Excel 工作表导入 ASP.Net 网页并将其保存在我的数据库中的 SQL 服务器中。

当我从所需的表格中导入数据时,它在 ASP 网页或数据库中的默认排序不是导入的,这对最终结果有很大影响并且也会丢失数据。 如需更多说明,如果 excel 表中的第一行具有第一个 ID 是 '1' ,活动是“新安装”等等......在 ASP 网页中,SQL 数据库可能出现在第九行并且没有完整数据

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.IO;

    using System.Data;

    using System.Data.OleDb;

    namespace ImpExpExc
    {
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PopulateData();
                lblMessage.Text = "Current Database Data!";
            }
        }




        private void PopulateData()
        {
            using (TEDataEntities dc = new TEDataEntities())
            {
                gvData.DataSource = dc.ImportExportExcels.ToList();
                gvData.DataBind();
            }
        }

        protected void btnImport_Click(object sender, EventArgs e)
        {
            if (FileUpload1.PostedFile.ContentType == "application/vnd.ms-excel" || 
                FileUpload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
            {
                try
                {
                    string fileName = Path.Combine(Server.MapPath("~/ImportDocument"), Guid.NewGuid().ToString() + Path.GetExtension(FileUpload1.PostedFile.FileName));
                    FileUpload1.PostedFile.SaveAs(fileName);

                    string conString = "";
                    string ext = Path.GetExtension(FileUpload1.PostedFile.FileName);
                    if (ext.ToLower() == ".xls")
                    {
                        conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                    }
                    else if (ext.ToLower() == ".xlsx")
                    {
                        conString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
                    }

                    string query = "Select [ID], [Activities], [Governorate], [Exchange], [Client], [Technician], [CircuitNo], [Comment], [Date] from [Sheet1$]";
                    OleDbConnection con = new OleDbConnection(conString);
                    if (con.State == System.Data.ConnectionState.Closed)
                    {
                        con.Open();
                    }
                    OleDbCommand cmd = new OleDbCommand(query, con);
                    OleDbDataAdapter da = new OleDbDataAdapter(cmd);

                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    da.Dispose();
                    con.Close();
                    con.Dispose();

                    //Import to Database
                    using (TEDataEntities dc = new TEDataEntities())
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            string empID = dr["ID"].ToString();
                            var v = dc.ImportExportExcels.Where(a => a.ID.Equals(empID)).FirstOrDefault();
                            if (v != null)
                            {
                                //Update here
                                v.Activities = dr["Activities"].ToString();
                                v.Governorate = dr["Governorate"].ToString();
                                v.Exchange = dr["Exchange"].ToString();
                                v.Client = dr["Client"].ToString();
                                v.Technician = dr["Technician"].ToString();
                                v.CircuitNo = dr["CircuitNo"].ToString();
                                v.Comment = dr["Comment"].ToString();
                                v.Date = dr["Date"].ToString();

                            }
                            else
                            {
                                //Insert here
                                dc.ImportExportExcels.AddObject(new ImportExportExcel
                                {
                                    ID = dr["ID"].ToString(),
                                    Activities = dr["Activities"].ToString(),
                                    Exchange = dr["Exchange"].ToString(),
                                    Client = dr["Client"].ToString(),
                                    Technician = dr["Technician"].ToString(),
                                    CircuitNo = dr["CircuitNo"].ToString(),
                                    Comment = dr["Comment"].ToString(),
                                    Date = dr["Date"].ToString()
                                });
                            }
                        }
                        dc.SaveChanges();
                    }
                    PopulateData();
                    lblMessage.Text = "Successfully data import done!";
                }
                catch (Exception)
                {

                    throw;
                }
            }

        }
    }
}

【问题讨论】:

  • 我认为这个问题的发生是因为 ID 在代码中是字符串,在数据库中是 nvarchar(50),但我不知道如何在代码中使其成为整数

标签: asp.net sql-server excel


【解决方案1】:

最后通过在数据库中添加具有增量 ID 的附加列解决了排序问题,但仍然有一些与日期相关的单元格为空

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多