VC的服务端调用本地数据库中的存储过程,存储过程中逻辑很简单,用GetTickCount()截取存储过程调用前和调用后的时间差有的时候会几秒钟,现在最严重情况甚至达到30秒,非常不理解
    服务端有接受数据线程和处理数据线程,接受数据的线程始终在接收,接收后存在链表中,处理数据的线程取出一条,处理过后删除,现在在处理某条数据的时候(就是调用存储过程的数据)就会耗时很长,造成接收线程那边接收一大堆,处理线程这边一条还没处理完,当存储数据链表中数据量达到一定程度后,程序就会崩掉
    给点思路,或者建议,真是找不到头绪,如果我有说的不明白的地方,请提出,随时回答,在线等!!!这个是调用存储过程用到的代码m_pParam1 = m_pCmd->CreateParameter( "OrderNo", adVarChar, adParamInput, 4, (_variant_t)StrCode );
char exec[50] = "sp_upinfo"; 
m_pCmd->PutCommandText(_bstr_t(exec));
m_pCmd->CommandType = adCmdStoredProc;
m_pCmd->Execute( NULL, NULL, adCmdStoredProc );
VCADOSQL耗时长

解决方案 »

  1.   

    你使用什么数据库?
    如果是sql数据库,那么,如果你在存储过程中设置了参数,那么你不用再
    m_pParam1 = m_pCmd->CreateParameter( "OrderNo", adVarChar, adParamInput, 4, (_variant_t)StrCode ); 将cmd 的命令文本设置到你的存储过程名,连接设置到打开的连接,那么cmd就会包含该存储过程的参数
      

  2.   

    需要确认问题到底是 sp_upinfo()本身 引起的,还是ADO代码调用引起的。可以简单测试一下:创建一个新的不带参数的存储过程(没有任何处理逻辑,直接返回);然后用ADO代码去调用,看看运行速度。
    如果速度正常,再分析是否sp_upinfo()本身有问题,或者传入参数有问题。
      

  3.   

    太夸张了,肯定存储过程调用的有问题,m_pParam1初始化了没?m_pParam1.CreateInstance("ADODB.Parameter");
    m_pParam1 = m_pCmd->CreateParameter( "OrderNo", adVarChar, adParamInput, StrCode.GetLength()+1, (_bstr_t)StrCode );试试!