批量更新数据库数据,如果其中某条或多条异常,怎么能在异常后继续执行更新。批量更新在try中
批量更新数据库数据,不就是for循环里面去执行单个更新操作,如果catch到异常, continue,继续执行下一个for循环不就行了吗。
嗯,我想问下,就是for循环里面去执行单个更新操作是循环一次访问一次数据库吗?因为这边使用了_salesRnRepository.UpdateAll(list.Where(t => t.SenderNO != ""), t => t.ColumnsToUpdate(c => c.SenderNO));这段代码,会一次性更新所有数据的
@兔兔涂涂凸: 哦,你是这个方法是,sql需要传一个list进去,就直接全部更新了,循环的部分sql帮你做了。
如果这样的话,我就不知道怎么办了,除非你别用这个方法,自己写sql,单条更新。
还有一个问题是如果单条更新,数据量太多的话,每次都去连接数据库,还是会花不少时间的。要做些优化的。
@让我发会呆: 是的,就是考虑到单挑更新如果数据过大会比较慢的,所以用这个一次性全部更新的方法
@兔兔涂涂凸: 用list里的数据去更新你的数据库,一般数据库操作出现异常,大部分都是数据和表的结构不符合,你可以更新前先去check一下你的数据,尽量保证合法性。sql操作都抛异常了,你不回滚,感觉有点说不过去啊。你的需求有点问题啊。
@让我发会呆: 也想到回滚,因为回滚会导致没异常的数据也更新不到数据库,我试下你说的check我的数据,保证它正确的前提下再更新,谢谢了
@兔兔涂涂凸: 加油 哈哈……
想发表情发不了..你就在循环里再加一层try啊..
前面通过接口获取数据, _salesRnRepository.UpdateAll(list.Where(t => t.SenderNO != ""), t => t.ColumnsToUpdate(c => c.SenderNO));再通过这段代码一次性把获取数据全部更新数据库中。现在就是如果果其中某条或多条异常,怎么能在异常后继续执行更新??。。。。。。求教
@兔兔涂涂凸: 这个和你关系的是UpdateAll的事情.
@吴瑞祥: 我要是用循环的话,循环一次就会更新所有的数据的
@兔兔涂涂凸: UpdateAll的事情.
@吴瑞祥: UpdateAll是封装好的了,也不好改,如果单条更新数据太多会很慢,在使用这个方法的基础上能有办法吗?
@兔兔涂涂凸: 任然是UpdateAll的事情 .如果他里面每次失败都回滚.
你在外面再怎么搞还不是一样.有这闲情逸致就读出来一条一条改.
@吴瑞祥: 。。。。。。。
@吴瑞祥: 麻烦问个问题,
FleckLog.Level = LogLevel.Debug;
var allSockets = new List<IWebSocketConnection>();
var ws = new WebSocketServer("ws://0.0.0.0:3128");
ws.RestartAfterListenError = true;
ws.Start(socket =>
{
socket.OnOpen = () =>
{
Console.WriteLine("Open!");
allSockets.Add(socket);
//OnOpen(socket);
};
socket.OnClose = () =>
{
Console.WriteLine("Close!");
allSockets.Remove(socket);
//OnClose(socket);
};
socket.OnMessage = m =>
{
Console.WriteLine(m);
allSockets.ToList().ForEach(s => s.Send("Echo: " + m));
//OnMessage(socket, m);
};
});
send send = new send
{
cmd = "command",
requestID = "LXS",
version = "1.0"
};
var getPrinterListCmd = JsonConvert.SerializeObject(send);
var input = Console.ReadLine();
while (input != "exit")
{
foreach (var socket in allSockets.ToList())
{
socket.Send(getPrinterListCmd);
}
input = Console.ReadLine();
}
当循环 allSockets.ToList()的时候, allSockets一直都是0,是怎么回事?谢谢