数据库的牛牛们,什么情况?

dic_008 2012-07-18 08:33:44

vector<upvalue>::iterator iter;
vector<upvalue>::iterator iend;
for (int i=0;i<num;i++)
{
tempNo=DanWeiNo.GetAt(i);
iter=ValueLIST.begin();
iend=ValueLIST.end();
while (iter!=iend)
{
if (iter->csDWNo==tempNo)
{
strSQL.Format("update Person set JDDM='%s',JDMC='%s',REGION='%s' where OrderNo='%s'and companyNo='%s'",iter->csJDDM,iter->csJDMC,iter->csReGion,m_OrderNo,iter->csDWNo);
m_conn->Execute((_bstr_t)strSQL,NULL,adCmdText);
}
iter++;
}
}

更新数据有100000左右,大概到5 6万的样子就会奔了?问题在那里
...全文
247 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjazz 2012-07-19
  • 打赏
  • 举报
回复
while (iter!=iend)
{
。。循环体内请使用异常保护,try catch,否则1条失败全崩溃
}

另外此类更新,至少需要增加一个最后更新时间列
dic_008 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
C++的?难道出现死锁了 你在查询语句中WITHNOLOCK试试
[/Quote]
就我一个访问也会死锁吗?
dic_008 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
囧。。。
m_conn->Execute 是不是这个function,看看connection是一直开着吗?笔数太多造成timeout ?

或者只open了没close造成connection数量过多超过SQL Server设定?

btw,不建议用这种循环的方式一笔笔跑10w的资料去update数据库,总有其他方法代替吧
[/Quote]

m_conn->ConnectionTimeout=300;
当更新完毕才断开连接
dic_008 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
感觉不需要使用循环来update啊
[/Quote]
你有什么好的方法?不妨说来听听。
dic_008 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
引用 11 楼 的回复:
引用 10 楼 的回复:
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行

我要查找其它文件中的哪些数据需要更新,如果是全部更新我也没必要放循环进去

一批一批的啊,一条一条的得循环多少次啊。

能一批一批的更新么?
[/Quote]
每更新一次大概就更新个几百条的样子,不知道你所说的一批是把满足条件的同时更新?(类似与多线程的那样?)还是其它?
SQL77 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 10 楼 的回复:
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行

我要查找其它文件中的哪些数据需要更新,如果是全部更新我也没必要放循环进去
[/Quote]
一批一批的啊,一条一条的得循环多少次啊。

能一批一批的更新么?
dic_008 2012-07-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行
[/Quote]
我要查找其它文件中的哪些数据需要更新,如果是全部更新我也没必要放循环进去
白天的猫头鹰 2012-07-19
  • 打赏
  • 举报
回复
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行
白天的猫头鹰 2012-07-19
  • 打赏
  • 举报
回复
更新那么多条数据,还使用循环方式一条条更新,很容易出现问题,以前遇到过,所以一般不这么操作,尽量避免使用循环更新,避免更新表不断被锁
Anod 2012-07-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
囧。。。
m_conn->Execute 是不是这个function,看看connection是一直开着吗?笔数太多造成timeout ?

或者只open了没close造成connection数量过多超过SQL Server设定?

btw,不建议用这种循环的方式一笔笔跑10w的资料去update数据库,总有其他方法代替吧
[/Quote]

赞成,m_conn一直开也许是最大的错误。
playwarcraft 2012-07-18
  • 打赏
  • 举报
回复
囧。。。
m_conn->Execute 是不是这个function,看看connection是一直开着吗?笔数太多造成timeout ?

或者只open了没close造成connection数量过多超过SQL Server设定?

btw,不建议用这种循环的方式一笔笔跑10w的资料去update数据库,总有其他方法代替吧
xuam 2012-07-18
  • 打赏
  • 举报
回复
感觉不需要使用循环来update啊
--小F-- 2012-07-18
  • 打赏
  • 举报
回复
C++的?难道出现死锁了 你在查询语句中WITHNOLOCK试试

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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