Импортируйте большие объемы данных из файла Excel на SQL Сервер, используя NET Core и Angular - PullRequest
0 голосов
/ 12 июля 2020

Я хочу импортировать данные из файлов Excel на SQL Сервер. Размер файла составляет 22 МБ и содержит примерно 1 миллион строк, но я получаю время ожидания ошибки.

Это код моего контроллера

[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;
    }

Я добавил maxRequestLength="1048576" executionTimeout="999999" в файл web.config в разделе system.web и maxAllowedContentLength="1073741824" тег безопасности, но я все еще сталкиваюсь с этой проблемой.

Зная, что когда я загружаю небольшие файлы, данные добавляются в таблицу

1 Ответ

0 голосов
/ 12 июля 2020

вы можете добавить все элементы в список и, наконец, использовать массовую вставку . использование может использовать Расширения Entity Framework .

...