- C/C++ code
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万的样子就会奔了?问题在那里
------解决方案--------------------
C++的?难道出现死锁了 你在查询语句中WITHNOLOCK试试
------解决方案--------------------
感觉不需要使用循环来update啊
------解决方案--------------------
囧。。。
m_conn->Execute 是不是这个function,看看connection是一直开着吗?笔数太多造成timeout ?
或者只open了没close造成connection数量过多超过SQL Server设定?
btw,不建议用这种循环的方式一笔笔跑10w的资料去update数据库,总有其他方法代替吧
------解决方案--------------------
------解决方案--------------------
while (iter!=iend)
{
。。循环体内请使用异常保护,try catch,否则1条失败全崩溃
}
另外此类更新,至少需要增加一个最后更新时间列
------解决方案--------------------
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行
------解决方案--------------------