使用 .NET Core ASP.NET Web 应用程序将 Excel 文件导入 SQL Server 数据库

问题描述

我正在尝试将 Excel 文件导入我的代码,然后使用 NET Core MVC Web 应用程序将其传输到数据库。我想知道 Visual Studios 上的任何很棒的库和可能有很大帮助的链接。现在我正在使用 EPPlus 版本,它从 Excel 文件获取数据并将其转换为 ToString。

这里的一些代码我正在处理大部分工作是在方法 import 当我尝试将数据库和模型设置为使用其他任何字符串类型时,我得到如下错误

当 IDENTITY_INSERT 设置为 OFF 时,无法为表中的标识列插入显式值

我试过 int.Parse() 但一直出错。我尝试对运行 SET IDENTITY_INSERT [StudentsList-2].[dbo].[Student] ON;sql Server 执行此操作,它告诉我命令运行成功,但是在运行程序时我不断收到错误消息。任何帮助或链接都会很棒!

using ImportExcel.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace ImportExcel.Controllers
{
    public class HomeController : Controller
    {
        private readonly ApplicationDbContext _dbContext;

        public HomeController(ApplicationDbContext dbContext)
        {
           _dbContext = dbContext;
        }
        public IActionResult Index()
        {
            return View();
        }
        ***public async Task<List<Countries>> Import(IFormFile file)
        {
            var list = new List<Countries>();
            using (var stream = new MemoryStream())
            {
                await file.copyToAsync(stream);
                using (var package = new ExcelPackage(stream))
                {

                    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
                    var rowcount = worksheet.Dimension.Rows;
                    var colcount = worksheet.Dimension.Columns;

                    for (int row = 2; row < rowcount; row++)
                    {
                        list.Add(new Countries {
                            CountryId=worksheet.Cells[row,1].Value.ToString().Trim(),CountryName = worksheet.Cells[row,2].Value.ToString().Trim(),TwoCharCountryCode = worksheet.Cells[row,3].Value.ToString().Trim(),ThreeCharCountryCode = worksheet.Cells[row,4].Value.ToString().Trim()
                        });
                    }
                }
            }
            //SaveDataToDb(list);
            _dbContext.Countries.AddRange(list);
            await _dbContext.SaveChangesAsync();
            
            return list;
            

        }***

       

        public IActionResult About()
        {
            ViewData["Message"] = "Your application description page.";

            return View();
        }

        public IActionResult Contact()
        {
            ViewData["Message"] = "Your contact page.";

            return View();
        }

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

        [responsecache(Duration = 0,Location = responsecacheLocation.None,NoStore = true)]
        public IActionResult Error()
        {
            return View(new Errorviewmodel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

解决方法

特别是关于您遇到的错误问题,您必须在代码中运行命令以确保它在同一连接上;它不是全局应用于所有连接。 你可以这样做:

await _dbContext.Database.ExecuteSqlCommandAsync(@"SET IDENTITY_INSERT [StudentsList-2].[dbo].[Student] ON");
await _dbContext.SaveChangesAsync();
await _dbContext.Database.ExecuteSqlCommandAsync(@"SET IDENTITY_INSERT [StudentsList-2].[dbo].[Student] OFF");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...