问题描述
我正在尝试将 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");