如何更新数据库中已经存在的行?
在通过Excel文件上传和Epplus更新数据库中已经存在的行时,正在创建一个新的行,而不是更新已经存在的数据。
如何更新现有行而不是添加新行?
谢谢您的帮助
public class Insured
{
[Key]
public int id { get; set; }
[Required]
public string identifier { get; set; }
public string policyno { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
public string gender { get; set; }
public int year { get; set; }
}
// Controller method
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ImportExcelFile(IFormFile ExcelFile)
{
ViewBag.Message = "";
if (ExcelFile != null)
{
var list = new List<Insured>();
using (var stream = new MemoryStream())
{
await ExcelFile.CopyToAsync(stream);
using (var package = new ExcelPackage(stream))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets ["Sheet1"];
var rowcount = worksheet.Dimension.Rows;
for (int row = 2; row <= rowcount; row++)
{
list.Add(new Insured
{
identifier = worksheet.Cells [row,1].Value.ToString().ToLower().Trim(),
policyno = worksheet.Cells [row, 2].Value.ToString().Trim(),
firstname = worksheet.Cells [row, 3].Value.ToString().Trim(),
lastname = worksheet.Cells [row, 4].Value.ToString().Trim(),
gender = worksheet.Cells [row, 5].Value.ToString().Trim(),
gender = worksheet.Cells [row, 6].Value.ToString().Trim(),
});
}
}
foreach (var item in list)
{
if (ModelState.IsValid)
{
// check if record exist in the database
var query = from obj in _db.dbLifeData
where obj.identifier == item.identifier.ToLower() && obj.policyno == item.policyno
select obj;
if (query.Count() > 0) // if row already exists
{
var query2 = from obj in _db.dbLifeData
where obj.identifier == item.identifier.ToLower() && obj.policyno == item.policyno
&& obj.year <= item.year
select obj; //update the existing data in the database if year is greater
if (query2.Count() != 0)
{
_db.dbLifeData.UpdateRange(item);
_db.SaveChanges();
}
}
else //if no record found add new row
{
_db.dbLifeData.AddRange(item);
_db.SaveChanges();
}
}
}
}
}
}
When updating a row that already exists in the database via an Excel file upload and EPPlus, a new row is being created instead of updating the data that already exists.
How can I update the existing row instead of getting a new row added?
Thank you for the kind assistance
public class Insured
{
[Key]
public int id { get; set; }
[Required]
public string identifier { get; set; }
public string policyno { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
public string gender { get; set; }
public int year { get; set; }
}
// Controller method
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> ImportExcelFile(IFormFile ExcelFile)
{
ViewBag.Message = "";
if (ExcelFile != null)
{
var list = new List<Insured>();
using (var stream = new MemoryStream())
{
await ExcelFile.CopyToAsync(stream);
using (var package = new ExcelPackage(stream))
{
ExcelWorksheet worksheet = package.Workbook.Worksheets ["Sheet1"];
var rowcount = worksheet.Dimension.Rows;
for (int row = 2; row <= rowcount; row++)
{
list.Add(new Insured
{
identifier = worksheet.Cells [row,1].Value.ToString().ToLower().Trim(),
policyno = worksheet.Cells [row, 2].Value.ToString().Trim(),
firstname = worksheet.Cells [row, 3].Value.ToString().Trim(),
lastname = worksheet.Cells [row, 4].Value.ToString().Trim(),
gender = worksheet.Cells [row, 5].Value.ToString().Trim(),
gender = worksheet.Cells [row, 6].Value.ToString().Trim(),
});
}
}
foreach (var item in list)
{
if (ModelState.IsValid)
{
// check if record exist in the database
var query = from obj in _db.dbLifeData
where obj.identifier == item.identifier.ToLower() && obj.policyno == item.policyno
select obj;
if (query.Count() > 0) // if row already exists
{
var query2 = from obj in _db.dbLifeData
where obj.identifier == item.identifier.ToLower() && obj.policyno == item.policyno
&& obj.year <= item.year
select obj; //update the existing data in the database if year is greater
if (query2.Count() != 0)
{
_db.dbLifeData.UpdateRange(item);
_db.SaveChanges();
}
}
else //if no record found add new row
{
_db.dbLifeData.AddRange(item);
_db.SaveChanges();
}
}
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
之所以因为Excel中的数据没有主键“ ID”,并且数据库中的主键设置为自动提出,因此“ update
”工作:
结果:

It wa because the data in your excel does not have the primary key"Id",and the primary key in your database was set to auto-increment,so the "Update"turn to "Add" Automaticlly
I tried as below and it could work:
Result:
