日期:2014-05-18  浏览次数:20527 次

数据库的牛牛们,什么情况?
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数据库,总有其他方法代替吧
------解决方案--------------------
探讨
囧。。。
m_conn->Execute 是不是这个function,看看connection是一直开着吗?笔数太多造成timeout ?

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

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

------解决方案--------------------
while (iter!=iend)

。。循环体内请使用异常保护,try catch,否则1条失败全崩溃
}

另外此类更新,至少需要增加一个最后更新时间列
------解决方案--------------------
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行
------解决方案--------------------
探讨
引用:
而且即使使用循环执行,也最好,把m_conn->Execute放在循环体外面,一次提交所有的更新sql语句到数据库执行

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