提高foreach 更新 效率 更新数据库一批数据 但每次更新前都要查询一下

qq_37449334 2017-02-04 04:31:09
查询后 更新 条码关系
codelist=‘1’,‘2’,‘3’,‘4’,‘5’ 之类的
Bbarcode =‘xxxxxx’
foreach (string s in codelist)
{
string sql = "SELECT * FROM BarCode where sbarcode ='" + Sbarcode + "' and bbarcode is null and isuse=0";
Tb_BarCode barcode = db.SqlQuery<Tb_BarCode>(sql).FirstOrDefault();
if (barcode != null)
{
string sql2 = "update BarCode set BBarCode='" + Bbarcode + "' where sbarcode ='" + Sbarcode + "' and bbarcode is null and isuse=0";
if (result.IndexOf(Bbarcode) == -1)
{
result = result + Bbarcode + ",该大码成功绑定以下小码\r\n--------------------\r\n";
}
if (db.ExecuteSqlCommand(sql2) > 0)
{

result = result + Sbarcode + ",绑定成功!\r\n";
}
else
{
result = result + Sbarcode + ",绑定失败!\r\n";
}
}
else
{
if (result.IndexOf(Bbarcode) == -1)
{
result = result + Bbarcode + "\r\n--------------------\r\n";
}
result = result + Sbarcode + ",该码已绑定!\r\n";
} }
...全文
523 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2017-02-06
  • 打赏
  • 举报
回复
9楼的思路可行 可以把查询的工作放在内存中完成, 程序初始化的时候,将库中的最新数据读出来 后面更新的时候,将已有数据与最新数据做简单比对, 将新数据进行批量插入或者更新,可以大幅提高性能
cpycpy000 2017-02-06
  • 打赏
  • 举报
回复
数据量不多的话,可以先从数据库中取出所有数据,存在本地的hashset中, 然后写入之前hashset.contains一下就行了_(:3ゝ∠)_ 数据量大的话,就要学会 分类数据 了 写入的数据肯定也要分类写入,同一类的一起,先查再对比后写
BenBenBears 2017-02-05
  • 打赏
  • 举报
回复
引用 7 楼 qq_37449334 的回复:
[quote=引用 1 楼 BenBenBears 的回复:]

SELECT * FROM BarCode where sbarcode in (‘XXX’,'XXX',‘XXX’.....) and bbarcode is null and isuse=0
将foreach的集合写在in里边,再将查询结果Update,其余的提示已绑定
我要获得那些更新失败那些没更新成功[/quote] 考虑一下下面的判断是否多余

if (result.IndexOf(Bbarcode) == -1)
foreach之前应该可以排除codelist里的重复项,这样result也会比较直观。
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 1 楼 BenBenBears 的回复:

SELECT * FROM BarCode where sbarcode in (‘XXX’,'XXX',‘XXX’.....) and bbarcode is null and isuse=0
将foreach的集合写在in里边,再将查询结果Update,其余的提示已绑定
我要获得那些更新失败那些没更新成功
  • 打赏
  • 举报
回复
引用 4 楼 qq_37449334 的回复:
有什么推荐的方法吗
你对自己的项目有多深入的描述,才会有具体的优化方法。 根本没有什么初级的具体方法!
  • 打赏
  • 举报
回复
对于大批量数据的导入操作来说,假设每一个都“查询”最终需要2个小时才能完成,而不“查询”导入则在5分钟可以完成,为了这个“效率”的原因,你得把整个结构都重新设计了。例如分表、分库而不混在一起(这时候分表的 key 本身就减小了搜索范围),等等。都是实践做法,而非最初级最简单的理论做法。 如果你只是想用刚学编程的学生在课堂上学的那几条语句就来处理实际问题,如果没有独特的设计,那么优化时除了检查一下“有没有创建必要的数据库索引”这类最常规的东西以外,也就没有什么技术方法了。
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
要不要查询,这是业务逻辑设计问题,其实不是低级的编程问题。 例如如果你把数据都统一删除了,再 Insert,那么久不需要查询了。甚至你可以先把数据库索引删除,等 Insert 完成之后再创建索引,这样就能批量导入数据。 总之是业务逻辑的说明,决定了你的程序编写结果。要想提高“效率”,纠结个别编程语句终将是小伎俩,不如想明白能不能先改变业务逻辑描述方式。
有什么推荐的方法吗
  • 打赏
  • 举报
回复
要不要查询,这是业务逻辑设计问题,其实不是低级的编程问题。 例如如果你把数据都统一删除了,再 Insert,那么久不需要查询了。甚至你可以先把数据库索引删除,等 Insert 完成之后再创建索引,这样就能批量导入数据。 总之是业务逻辑的说明,决定了你的程序编写结果。要想提高“效率”,纠结个别编程语句终将是小伎俩,不如想明白能不能先改变业务逻辑描述方式。
qq_37449334 2017-02-05
  • 打赏
  • 举报
回复
引用 1 楼 BenBenBears 的回复:

SELECT * FROM BarCode where sbarcode in (‘XXX’,'XXX',‘XXX’.....) and bbarcode is null and isuse=0
将foreach的集合写在in里边,再将查询结果Update,其余的提示已绑定
我要知道那些没有更新~
BenBenBears 2017-02-04
  • 打赏
  • 举报
回复

SELECT * FROM BarCode where sbarcode in (‘XXX’,'XXX',‘XXX’.....) and bbarcode is null and isuse=0
将foreach的集合写在in里边,再将查询结果Update,其余的提示已绑定

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧