【发布时间】:2022-06-15 04:09:39
【问题描述】:
我首先使用 C# 编程语言开发带有数据库的桌面软件。数据库连接在数据库优先逻辑中。
我的要求是更新满足特定条件的设备的截止日期和最后一个代码字段,为此我已经在 linq 上进行了更新,它工作正常,但一次。这个公共的 void 构造在 2-3-... 之后不起作用。我需要关闭并再次打开应用程序。
checkData 函数每 20 秒调用一次。
我在算法或编码上做错了什么或忘记了什么?
有问题的代码;
public void checkData()
{
var list = database.table2.Where(x => x.ALARM == "ABC");
foreach (var data in list)
{
var obje1 = database.clients.Find(data.ID);
if (obje1.VALUE >= 100 && obje1.STATUS == 1)
{
try
{
obje1.REPORTCODE = "ABC";
obje1.UPDATETIME = DateTime.Now;
}
catch
{
}
}
}
database.SaveChangesAsync();
}
【问题讨论】:
-
那么,那个空的 try/catch 的目的是什么?如果您在那里遇到错误,您将永远不会知道。请删除空的 try catch 并重试您的代码。
-
我正计划制作一个日志系统来捕获另一个表。我还没有添加它。是异常描述值
-
这里可能会发生一些事情。首先,您需要将第一个 linq 转换为列表。所以在最后添加 .ToList() 。其次,如果 Find 查询不匹配任何内容,则会引发 ArgumentNullException。它可能会被抛出,这就是您的程序也可能冻结的原因。首先通过抓住它来解决这个问题。
-
将
SaveChangesAsync()更改为SaveChanges()。或者将您的void方法更改为async Task并等待调用异步保存更改方法。 -
@KadirÇOLAK 一般来说,try/catch 是一个非常有用的编程结构。但不以隐藏错误为代价,让您问自己出了什么问题。如果您计划记录错误并且错误不是致命的(您的程序可以继续工作),那么可以,添加日志消息并继续。但是,如果您不打算对错误异常执行某些操作,则不要捕获任何内容
标签: c# .net linq foreach sql-update