2

我已经开发了使用 c# 将 excel 工作表数据导入网格的代码。它在 Local 中运行良好,当涉及到生产时,在一段时间后它会给出错误提示Unspecified error。如果我重置 IIS 服务器,它会得到解决。任何人都可以建议永久解决方案吗?

打开 Excel 的示例代码:

fileName = Path.GetFileName(fuExcel.PostedFile.FileName);
                    string fileExtension = Path.GetExtension(fuExcel.PostedFile.FileName);
                    string fileLocation = Server.MapPath("~/App_Data/" + fileName);
                    fuExcel.SaveAs(fileLocation);
                    string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= '" + fileLocation + "';Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                    DataTable dtFromExcel = new DataTable();
                    DataTable dtBarcodeDetails = new DataTable();
                    string Sheet = System.Configuration.ConfigurationManager.AppSettings["SheetName"].ToString();
                    using (OleDbConnection excelConnection = new OleDbConnection(connectionString))
                    {   
                        OleDbCommand cmd = new OleDbCommand("Select * from [" + Sheet + "$]", excelConnection);
                        excelConnection.Open();
                        OleDbDataReader dReader;
                        dReader = cmd.ExecuteReader();
                        dtFromExcel.Load(dReader);
                        excelConnection.Close();
                    }

配置代码:

    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
        <identity impersonate="false"/>
<httpRuntime maxRequestLength="1048576" executionTimeout="43200"/>
    </system.web>
4

1 回答 1

0

我想如果在您的 Excel 处理中引发异常,您的连接将被处理。但我不确定它是否会关闭。如果你尝试这样的事情,它会改变什么吗?

using (OleDbConnection excelConnection = new OleDbConnection(connectionString))
{
    try
    {
        OleDbCommand cmd = new OleDbCommand("Select * from [" + Sheet + "$]", excelConnection);
        excelConnection.Open();
        OleDbDataReader dReader;
        dReader = cmd.ExecuteReader();
        dtFromExcel.Load(dReader);
    }
    finally
    {
        if (excelConnection != null && excelConnection.State == ConnectionState.Open)
            excelConnection.Close();
        OleDbConnection.ReleaseObjectPool();
    }
}

希望这会有所帮助

于 2013-02-11T09:59:24.817 回答