【问题标题】:Import large amounts of data from Excel file into SQL Server using .NET Core and Angular使用 .NET Core 和 Angular 将大量数据从 Excel 文件导入 SQL Server
【发布时间】:2020-11-01 09:45:18
【问题描述】:

我想将 Excel 文件中的数据导入 SQL Server。文件大小为 22 MB,包含大约 100 万行,但我收到错误超时。

这是我的控制器的代码

[System.Web.Http.Route("UploadExcel")]
[System.Web.Http.HttpPost]
[RequestFormLimits(MultipartBodyLengthLimit = 409715200)]
[RequestSizeLimit(409715200)]
public string ExcelUpload()
{
        string message = "";
        HttpResponseMessage result = null;
        var httpRequest = HttpContext.Current.Request;

        using (AngularDBEntities objEntity = new AngularDBEntities())
        {
            if (httpRequest.Files.Count > 0)
            {
                HttpPostedFile file = httpRequest.Files[0];
                Stream stream = file.InputStream;

                IExcelDataReader reader = null;

                if (file.FileName.EndsWith(".xls"))
                {
                    reader = ExcelReaderFactory.CreateBinaryReader(stream);
                }
                else if (file.FileName.EndsWith(".xlsx"))
                {
                    reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                }
                else
                {
                    message = "This file format is not supported";
                }

                DataSet excelRecords = reader.AsDataSet();
                reader.Close();

                var finalRecords = excelRecords.Tables[0];

                for (int i = 0; i < finalRecords.Rows.Count; i++)
                {
                    UserDetail objUser = new UserDetail();
                    objUser.UserName = finalRecords.Rows[i][0].ToString();
                    objUser.EmailId = finalRecords.Rows[i][1].ToString();
                    objUser.Gender = finalRecords.Rows[i][2].ToString();
                    objUser.Address = finalRecords.Rows[i][3].ToString();
                    objUser.MobileNo = finalRecords.Rows[i][4].ToString();
                    objUser.PinCode = finalRecords.Rows[i][5].ToString();

                    objEntity.UserDetails.Add(objUser);
                }

                int output = objEntity.SaveChanges();

                if (output > 0)
                {
                    message = "Excel file has been successfully uploaded";
                }
                else
                {
                    message = "Excel file uploaded failed";
                }
            }
            else
            {
                result = Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }

        return message;
    }

我在system.web部分的web.config文件中添加了maxRequestLength="1048576" executionTimeout="999999",在安全标签中添加了maxAllowedContentLength="1073741824",但我仍然面临这个问题。

知道当我上传小文件时,数据被添加到表中

【问题讨论】:

  • 尝试增加DB连接字符串的超时时间

标签: sql-server excel .net-core


【解决方案1】:

您可以添加列表中的所有项目,最后使用批量插入。使用可以使用Entity Framework Extensions

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    相关资源
    最近更新 更多