【问题标题】:ASP.Net Importing Excel File To DataTable losses Values When It Consists Different Data Types当它包含不同的数据类型时,ASP.Net 将 Excel 文件导入 DataTable 会丢失值
【发布时间】:2022-06-15 16:20:36
【问题描述】:

使用以下代码将excel数据导入数据表。

一切正常,但是当 excel 文件中的值是不同的数据类型时,将数据导入 数据表会丢失数据

例如,如果 Colum-A 在 A1 单元格中有 1,在 A2 单元格中有“文本”,则 A2 在导入的数据表中返回为空白。

任何摆脱这个问题的建议都会非常有帮助。

ASPX 代码窗口

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:FileUpload ID="FileUpload1" runat="server" />  

        <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />  
        <br />  
        <asp:Label ID="Label1" runat="server" Text="Has Header ?" />  

        <asp:RadioButtonList ID="rbHDR" runat="server">  
            <asp:ListItem Text="Yes" Value="Yes" Selected="True">  
            </asp:ListItem>  
            <asp:ListItem Text="No" Value="No"></asp:ListItem>  
        </asp:RadioButtonList>  

        <asp:GridView ID="GridView1" runat="server" OnPageIndexChanging="PageIndexChanging" AllowPaging="true">  
        </asp:GridView>  

    </form>
</body>
</html>

后端代码

using System;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnUpload_Click(object sender, EventArgs e)

    {

        if (FileUpload1.HasFile)

        {

            string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);

            string Extension = Path.GetExtension(FileUpload1.PostedFile.FileName);

            string FolderPath = ConfigurationManager.AppSettings["FolderPath"];

            string FilePath = Server.MapPath(FolderPath + FileName);

            FileUpload1.SaveAs(FilePath);

            Import_To_Grid(FilePath, Extension, rbHDR.SelectedItem.Text);

        }

    }

    private void Import_To_Grid(string FilePath, string Extension, string isHDR)

    {

        string conStr = "";

        switch (Extension)

        {

            case ".xls": //Excel 97-03  

                conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]

                .ConnectionString;

                break;

            case ".xlsx": //Excel 07  

                conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]

                .ConnectionString;

                break;

        }

        conStr = String.Format(conStr, FilePath, isHDR);

        OleDbConnection connExcel = new OleDbConnection(conStr);

        OleDbCommand cmdExcel = new OleDbCommand();

        OleDbDataAdapter oda = new OleDbDataAdapter();

        DataTable dt = new DataTable();

        cmdExcel.Connection = connExcel;

        //Get the name of First Sheet  

        connExcel.Open();

        DataTable dtExcelSchema;

        dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();

        connExcel.Close();

        //Read Data from First Sheet  

        connExcel.Open();

        cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";

        oda.SelectCommand = cmdExcel;

        oda.Fill(dt);

        connExcel.Close();

        //Bind Data to GridView  

        GridView1.Caption = Path.GetFileName(FilePath);

        GridView1.DataSource = dt;

        GridView1.DataBind();

    }

    protected void PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        string FolderPath = ConfigurationManager.AppSettings["FolderPath"];

        string FileName = GridView1.Caption;

        string Extension = Path.GetExtension(FileName);

        string FilePath = Server.MapPath(FolderPath + FileName);

        Import_To_Grid(FilePath, Extension, rbHDR.SelectedItem.Text);

        GridView1.PageIndex = e.NewPageIndex;

        GridView1.DataBind();

    }
}

网页配置代码

<configuration>

  <appSettings>

    <add key="FolderPath" value="Files/" />

  </appSettings>

  <connectionStrings>
    <add name="Excel03ConString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'" />
    <add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'" />
  </connectionStrings>

  <system.web>
      <compilation debug="true" targetFramework="4.5.2" />
      <httpRuntime targetFramework="4.5.2" />
    </system.web>
</configuration>

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您必须在连接字符串中设置IMEX=1

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1};IMEX=1'
    

    here IMEX=1 所述,告诉驱动程序始终将混合的数据列作为文本读取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多