在VC中利用ADO调用oracle库的存储过程,存储过程如果耗时很长,想终止这个调用;
请教高手,这时候该怎么处理??自己弄了个小程序在测试,利用了CommandTimeOut、ConnectionTimeout属性没效果;也尝试过计时器timer,同样无效!调用的代码:
pCommand->ActiveConnection=m_pConnection;//连接对象
pCommand->CommandText=storeproc;
pCommand->CommandType=adCmdStoredProc;//设定CommandType属性为存储过程类型
pCommand->Parameters->Refresh();
pRecordset.CreateInstance(__uuidof(Recordset));
SetTimer(316,10000,NULL);
pRecordset=pCommand->Execute(NULL,NULL,adCmdStoredProc);
请教高手,这时候该怎么处理??自己弄了个小程序在测试,利用了CommandTimeOut、ConnectionTimeout属性没效果;也尝试过计时器timer,同样无效!调用的代码:
pCommand->ActiveConnection=m_pConnection;//连接对象
pCommand->CommandText=storeproc;
pCommand->CommandType=adCmdStoredProc;//设定CommandType属性为存储过程类型
pCommand->Parameters->Refresh();
pRecordset.CreateInstance(__uuidof(Recordset));
SetTimer(316,10000,NULL);
pRecordset=pCommand->Execute(NULL,NULL,adCmdStoredProc);
解决方案 »
- 半透明控件如何实现!(不是对话框的那种)
- 长期编程会秃顶吗?
- 电脑自带的计算器(科学型)的精度为什么能那么高?
- 错误 2 error C2664: “sendto”: 不能将参数 2 从“CString”转换为“const char *”
- [求助]使用VS2005写一个简单的MFC,可是却提示说0x78260a88 (mfc80d.dll) 处未处理的异常
- 关于弹出式菜单?
- 今天放假回家,散分,祝大家新年快乐!
- 譬如做一个按一键出现 “你好“字样,想知道如何生成这个程序
- 怎么不能删除目录
- 在Windows下用多线程获取某个目录下的所有文件,并将其文件信息显示出来
- VC怎么读取html中超级链接内容
- MFC DDK
先设置 connectiontimeout=10
再打开对象,否则无效
m_pConnection->ConnectionString="File Name=LinkDatabase.udl";
m_pConnection->ConnectionTimeout=10;//等待连接的时间为10s
m_pConnection->CommandTimeout=10; hr=m_pConnection->Open("","","",adConnectUnspecified);
if(FAILED(hr))
{
AfxMessageBox("打开数据库失败!");
return false;
}
cmd->CommandTimeout = 5;
cmd->ActiveConnection = m_pConnection;
cmd->CommandText = (_bstr_t)strProName;
cmd->CommandType = adCmdStoredProc
cmd->Execute(NULL, NULL, adCmdStoredProc);
是每次执行SQL前都重连 还是一直连着的?
pCommand->CommandTimeout=10;
pCommand->ActiveConnection=m_pConnection;//连接对象
pCommand->CommandText=storeproc;
pCommand->CommandType=adCmdStoredProc;//设定CommandType属性为存储过程类型
pCommand->Parameters->Refresh();
pRecordset.CreateInstance(__uuidof(Recordset));
SetTimer(316,2000,NULL);
pRecordset=pCommand->Execute(NULL,NULL,adCmdStoredProc);
hr = pConnection->Open(strCnn,"","",NULL); TESTHR(pCmdByRoyalty.CreateInstance(__uuidof(Command))); pCmdByRoyalty->ActiveConnection = pConnection;
pCmdByRoyalty->CommandText = "byRoyalty";
pCmdByRoyalty->CommandType = adCmdStoredProc;
pCmdByRoyalty->CommandTimeout = 15; //Define stored procedure's input parameter.
printf("Enter Royalty : ");
scanf("%d",&intRoyalty); //Assign Integer value
vtroyal.vt = VT_I2;
vtroyal.iVal = intRoyalty; TESTHR(pPrmByRoyalty.CreateInstance(__uuidof(Parameter)));
pPrmByRoyalty->Type = adInteger;
pPrmByRoyalty->Size = 3;
pPrmByRoyalty->Direction = adParamInput;
pPrmByRoyalty->Value = vtroyal;
pCmdByRoyalty->Parameters->Append(pPrmByRoyalty); //Create a recordset by executing a command.
pRstByRoyalty = pCmdByRoyalty->Execute(NULL,NULL,adCmdStoredProc);
pCommand.CreateInstance(__uuidof(Command));
_bstr_t storeproc("SGPM.PKG_CC_CTI.P_GS_TEST2");//存储过程名 _RecordsetPtr pRecordset;
try
{
double fOutCode=0;
pCommand->ActiveConnection=m_pConnection;//连接对象
pCommand->CommandText=storeproc;
pCommand->CommandType=adCmdStoredProc;//设定为存储过程类型
pCommand->CommandTimeout=10; pCommand->Parameters->Refresh();
// pRecordset.CreateInstance(__uuidof(Recordset));
SetTimer(316,15000,NULL);
// pRecordset=pCommand->Execute(NULL,NULL,adCmdStoredProc);
pCommand->Execute(NULL,NULL,adCmdStoredProc);已经改为这个顺序,还是不行,还是卡住在执行存储过程那;另外:ontimer的处理是:
switch(nIDEvent)
{
case 316:
m_pConnection->Close();
m_pConnection.Release();
AfxMessageBox("执行存储过程失败!");
KillTimer(316);
OnInitDialog();
break;
也不行!存储过程是个死循环:
i := 1;
while i < 10000 loop
i := i;
end loop;
特意测试为之的!求帮忙啊!!谢谢!