关于for循环Insert数据库的问题

A_Pi 2018-04-21 02:42:52
for (int i = 1; i <= num; i++)
{
if (i == num)
{
if (OrderDetailsBLL.insertOrderDetails(OrderID, LuckyNum + i))
{
//商品参加人数增加
GoodsBLL.updatejoinpeople(num, order.GoodID);
Response.Write("<script>alert(\"购买成功!!\");</script>");
Response.Redirect(Request.Url.ToString());
return;
}
}
else
{
OrderDetailsBLL.insertOrderDetails(OrderID, LuckyNum + i);
}
}

如果num有个几百 执行这段代码的时间就很长
请问如何提高效率?
OrderDetails订单详情表只有2个字段 一个OrderID一个LuckyNum 无主键
...全文
2340 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
全栈极简 2018-04-23
  • 打赏
  • 举报
回复
mirrorspace 2018-04-23
  • 打赏
  • 举报
回复
ado.net连接数据库有放在连接池的.第1次连接数据库可以慢一些.后来再连是很快的. 我试验过执行一次CRUD,在数据库表的记录不多3万以内,字段又只有几个或十几个,这种一般是豪秒就得到结果 几百个就执行很长时间,有可能是插入的逻辑很复杂.会判断很多表很多逻辑处理.时间花在这上面了
  • 打赏
  • 举报
回复
使用stopwatch 来测试耗时的方法具体是那一个,特别要在Bll层中检查是否存在每读写一次数据库都存在打开关闭数据库连接的情况,或者通过拼接基础的sql语句整体插入或者写个proc执行循环的操作。
ctaosharpzai 2018-04-23
  • 打赏
  • 举报
回复
百度下表值参数批量导入,很快的,也就是楼上说的BulkCopy
FainSheeg 2018-04-23
  • 打赏
  • 举报
回复
很明显,你没有开启事务,时间都花在频繁的开关数据库连接上了。
圣殿骑士18 2018-04-22
  • 打赏
  • 举报
回复
几百就慢的不行,你要找找方法OrderDetailsBLL.insertOrderDetails的问题
  • 打赏
  • 举报
回复
至于说效率问题,你自己可以记录日志,看看到底需要几毫秒。你贴不出来测试结果,也就不能深入,靠猜测是发现不了明显不合理的问题的。
  • 打赏
  • 举报
回复
实际上,你这个代码有个基本的 bug,就是没有说明事务范围。 具有事务性的代码通常是这样的
using (var tran = CreateMyTransaction(connectionString))
{
    for (int i = 1; i <= num; i++)
    {
        OrderDetailsBLL.insertOrderDetails(OrderID, LuckyNum + i);
    }
    GoodsBLL.updatejoinpeople(num, order.GoodID);
    tran.Commit();
}
在业务逻辑代码中,通常都以事务为基本功能点。如果没有事务概念,同时你又不是一整套 NoSql 之类的另外全新的设计编程思路,那么这显然是不可靠的程序。一看代码就废弃了。
yaotomo 2018-04-22
  • 打赏
  • 举报
回复
以前我写的博客,可以参考一下 http://www.cnblogs.com/yaotome/p/8715662.html
weixin_42038589 2018-04-21
  • 打赏
  • 举报
回复
别调用单独一个一个插入的函数,再写一个批量插入得 函数
休闲中 2018-04-21
  • 打赏
  • 举报
回复
你可以不用调用单独一个一个插入的函数,重新写一个批量插入得 函数 可以编写批量插入的sql语句,然后执行,速度很快的
  • 打赏
  • 举报
回复
如果这类代码不能达到每秒500~1000次插入,那么你其实你就应该查找插入数据本身的问题,比如说有没有特别复杂的字段、触发器干扰、或者有子表(因为你是 ORM 的,所以看不出来)等等问题。
stevenjin 2018-04-21
  • 打赏
  • 举报
回复
这里还要考虑事务吧
XD-1 2018-04-21
  • 打赏
  • 举报
回复 1
你是往数据库插入数据吗?造成慢的原因可能是频繁多次调用数据库插入数据。你可以考虑: 1.用bulk copy 批量插入,基于你的数据库,如sql server bulk copy,oracle bulk copy。2.写一个 Store Procedure,将要插入的数据一次性传入SP, 然后在SP里面进行插入。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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