导出Excel功能在Azure上不起作用(仅限大型记录)

3yhwsihp  于 2023-03-24  发布在  其他
关注(0)|答案(1)|浏览(173)

导出功能正常工作,在我的本地环境中没有任何错误,只在服务器环境中出现错误(Dev,QA)。我们过去在IIS中使用Web配置解决了同样的问题,但现在我们迁移到Azure并面临同样的问题,代表导出大量记录(Azure)。
以前的IIS代码:
相同的配置代码在azure上不起作用,因为它仅设置为IIS
现在,我们将应用程序部署到Azure,并以相同的方式更改Web配置,但如果记录计数大于约12,500,则仍会出现错误。

<system.webServer>

        <security>

              <requestFiltering>

                    <requestLimits maxQueryString="10000000"/>                    

              </requestFiltering>

        </security>

  </system.webServer>

导出功能在我的本地环境中正常工作,没有任何错误,仅在服务器环境(开发人员、QA)中出现错误。我们过去在IIS中使用Web配置解决了同样的问题,但现在我们迁移到Azure,并在代表导出大量记录(Azure)时面临同样的问题。
以前的IIS代码:
相同的配置代码在azure上不起作用,因为它仅设置为IIS
现在,我们将应用程序部署到Azure,并以相同的方式更改Web配置,但如果记录计数大于约12,500,则仍会出现错误。

<system.webServer>

        <security>

              <requestFiltering>

                    <requestLimits maxQueryString="10000000"/>                    

              </requestFiltering>

        </security>

  </system.webServer>
kkbh8khc

kkbh8khc1#

检查下面的步骤来读取巨大的Excel数据。
感谢@aspsnippets提供Excel代码。
在这里,我试图加载包含15 k记录的Excel文件。

***应用文件夹结构:***x1c 0d1x

  • 安装NuGet软件包System.Data.OleDb
    我的Controller.cs
using System.IO;
using System.Data;
using System.Data.OleDb;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace Excel_Export.Controllers
{
    public class HomeController : Controller
    {
        private IHostingEnvironment Environment;
        private IConfiguration Configuration;
        public HomeController(IHostingEnvironment _environment, IConfiguration _configuration)
        {
            Environment = _environment;
            Configuration = _configuration;
        }

        public IActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public IActionResult Index(IFormFile uploadFile)
        {
            if (uploadFile != null)
            {
                //Create a new Folder.
                string path = Path.Combine(this.Environment.WebRootPath, "Uploads");
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                //Save the uploaded Excel file in the Created Folder.
                string FName = Path.GetFileName(uploadFile.FileName);
                string FPath = Path.Combine(path, FName);
                using (FileStream stream = new FileStream(FPath, FileMode.Create))
                {
                    uploadFile.CopyTo(stream);
                }

                string conStr = this.Configuration.GetConnectionString("ExcelConString");
                DataTable dt = new DataTable();
                conStr = string.Format(conStr, FPath);

                using (OleDbConnection conExcel = new OleDbConnection(conStr))
                {
                    using (OleDbCommand cmdExcel = new OleDbCommand())
                    {
                        using (OleDbDataAdapter oledbExcel = new OleDbDataAdapter())
                        {
                            cmdExcel.Connection = conExcel;
                            conExcel.Open();
                            DataTable dtExcelSchema;
                            dtExcelSchema = conExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                            string sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
                            conExcel.Close();

                            conExcel.Open();
                            cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";
                            oledbExcel.SelectCommand = cmdExcel;
                            oledbExcel.Fill(dt);
                            conExcel.Close();
                        }
                    }
                }

            }
            return View();
        }
    }
}

我的appsettings.config

{
  "ConnectionStrings": {  
    "constr": "Server=tcp:****.database.windows.net,1433;Initial Catalog=****;Persist Security Info=False;User ID=****;Password=****;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30",
    "ExcelConString": "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"
  }
}

Web.config文件:

一个二个一个一个
web.config文件中添加上述设置。
我做了Remote Debugging
您可以在已部署的Azure App Service中查看Excel数据的计数。

为了避免与大小限制相关的问题,建议将Excel文件加载到Azure Blob并从那里读取文件。

相关问题