首页 新闻 会员 周边

各位大神,批量更新数据!!!新手求教。

0
悬赏园豆:5 [已解决问题] 解决于 2016-12-27 15:32

 批量更新数据库数据,如果其中某条或多条异常,怎么能在异常后继续执行更新。批量更新在try中

兔兔涂涂凸的主页 兔兔涂涂凸 | 初学一级 | 园豆:13
提问于:2016-12-27 14:18
< >
分享
最佳答案
0

批量更新数据库数据,不就是for循环里面去执行单个更新操作,如果catch到异常, continue,继续执行下一个for循环不就行了吗。

收获园豆:5
让我发会呆 | 老鸟四级 |园豆:2929 | 2016-12-27 14:27

 嗯,我想问下,就是for循环里面去执行单个更新操作是循环一次访问一次数据库吗?因为这边使用了_salesRnRepository.UpdateAll(list.Where(t => t.SenderNO != ""), t => t.ColumnsToUpdate(c => c.SenderNO));这段代码,会一次性更新所有数据的

兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 14:29

@兔兔涂涂凸: 哦,你是这个方法是,sql需要传一个list进去,就直接全部更新了,循环的部分sql帮你做了。

如果这样的话,我就不知道怎么办了,除非你别用这个方法,自己写sql,单条更新。

还有一个问题是如果单条更新,数据量太多的话,每次都去连接数据库,还是会花不少时间的。要做些优化的。

让我发会呆 | 园豆:2929 (老鸟四级) | 2016-12-27 14:53

@让我发会呆: 是的,就是考虑到单挑更新如果数据过大会比较慢的,所以用这个一次性全部更新的方法

兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 14:58

@兔兔涂涂凸: 用list里的数据去更新你的数据库,一般数据库操作出现异常,大部分都是数据和表的结构不符合,你可以更新前先去check一下你的数据,尽量保证合法性。sql操作都抛异常了,你不回滚,感觉有点说不过去啊。你的需求有点问题啊。

让我发会呆 | 园豆:2929 (老鸟四级) | 2016-12-27 15:08

@让我发会呆: 也想到回滚,因为回滚会导致没异常的数据也更新不到数据库,我试下你说的check我的数据,保证它正确的前提下再更新,谢谢了

兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 15:11

@兔兔涂涂凸: 加油  哈哈……

让我发会呆 | 园豆:2929 (老鸟四级) | 2016-12-27 15:32
其他回答(1)
0

想发表情发不了..你就在循环里再加一层try啊..

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-27 14:21

 前面通过接口获取数据, _salesRnRepository.UpdateAll(list.Where(t => t.SenderNO != ""), t => t.ColumnsToUpdate(c => c.SenderNO));再通过这段代码一次性把获取数据全部更新数据库中。现在就是如果果其中某条或多条异常,怎么能在异常后继续执行更新??。。。。。。求教

支持(0) 反对(0) 兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 14:24

@兔兔涂涂凸: 这个和你关系的是UpdateAll的事情.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-27 14:33

@吴瑞祥: 我要是用循环的话,循环一次就会更新所有的数据的

支持(0) 反对(0) 兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 14:35

@兔兔涂涂凸: UpdateAll的事情.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-27 14:47

@吴瑞祥: UpdateAll是封装好的了,也不好改,如果单条更新数据太多会很慢,在使用这个方法的基础上能有办法吗?

支持(0) 反对(0) 兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 14:59

@兔兔涂涂凸: 任然是UpdateAll的事情 .如果他里面每次失败都回滚.

你在外面再怎么搞还不是一样.有这闲情逸致就读出来一条一条改.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-27 15:16

@吴瑞祥: 。。。。。。。

支持(0) 反对(0) 兔兔涂涂凸 | 园豆:13 (初学一级) | 2016-12-27 15:17

@吴瑞祥: 麻烦问个问题,

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,是怎么回事?谢谢

支持(0) 反对(0) 兔兔涂涂凸 | 园豆:13 (初学一级) | 2018-02-01 15:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册