ADO报错重连的问题 小弟初学ADO,在对数据库操作的时候捕捉错误,但怎么判断这个错误是什么原因造成的呢?比如是重复健还是数据库断开?怎么知道在哪种情况下需要重连数据库呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问的好,try ... catch(_com_error e)如果有异常,那么 _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); TRACE("Error\n"); TRACE("Code = %08lx\n", e.Error()); TRACE("Code meaning = %s\n", e.ErrorMessage()); TRACE("Source = %s\n", (LPCSTR) bstrSource); TRACE("Description = %s\n", (LPCSTR) bstrDescription);就可以看到错误原因了。 try{...}catch(...){CString message;DWORD ErrorCode = GetLastError() ; char buff[128]; ::FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM,(void*)FORMAT_MESSAGE_FROM_STRING,ErrorCode,0,buff,128,0); message.Format("执行文件:%s错误,发生在:%d 行,错误描述为:%s",__FILE__,__LINE__,buff);MessageBox((LPCTSTR)message,"Error",MB_ICONERROR | MB_OK);} 捕获到了错误,但是具体哪些错误需要重连呢?我只知道拔网线和关数据库,其他还有什么情况呢?e.Error()等于什么时重连?呜呜~~ 回复人: fool_leave() ( ) 信誉:100 2005-01-27 20:39:00 得分: 0 捕获到了错误,但是具体哪些错误需要重连呢?我只知道拔网线和关数据库,其他还有什么情况呢?e.Error()等于什么时重连?呜呜~~ 这个也正是我头疼的问题。我把数据库关了,得到的错误是数据库未定义的错误号,我也不知道如何检查数据库已经断了。关于这个问题,我发过帖子,也未能得到答案。关注中 使用下面的语句,绝对好用!catch{AfxMessageBox(e.Description());} 在catch()后通过执行一条永远正确的sql语句select getdate() as date再判断是否是错,如果出错则证明需要重新连接数据库._ConnectionPtr中有个error集合,可以通过error的GetDescription获取错误信息. ZHENG017说的也有道理。各位一般是怎么判断的? try{}catch(_com_error e){e.discription;} 我是通过调用存储过程,然后返回文件,如果返回文件是ORACLE的一些错,或者是我程式连接的报错就会通过语句重连,当然执行SQL是一样的办法!不知道对你有没有帮助哦!如:ReExecute: if (mtCallProc.Lock() == 0) { delete[]pFileInfo; CDB::LogEvents(sAppName,EVENTLOG_ERROR_TYPE,"\nCan not lock proc!"); return -1; } sErr = db->CallProcedure(proc,&rs); //connect halt if (sErr!="OK") { CDB::LogEvents(sAppName,EVENTLOG_ERROR_TYPE,"\n"+sErr); if ((sErr.Find("ORA-12571") != -1) || (sErr.Find("ORA-03114") != -1) || (sErr.Find("DB Connection Is Invalid") != -1)) {ReConnect: strcpy(cTem,""); if (db->ConnectDB(cTem,sizeof(cTem))<0) { iReConnectTimes++; if (iReConnectTimes < 4) { goto ReConnect; } } else { mtCallProc.Unlock(); goto ReExecute; } } } mtCallProc.Unlock(); 将SQL Server 移到本地SQLite中耗时太长了 让窗口到屏幕边缘时,拖动无效 vs做安装包时怎么打包成单个的exe文件? edit控件显示数字问题 那里可以下载DbgView的源码 高分! 小问题 请问什么是Visucl DSP++呀?请大虾指教 很BT的问题,"应用程序错误" 高手救命啊, 很奇怪的问题(在线等待!!!)-- 昨天的问题还是没解决…… 想讨论一个比较烂的问题,在C 语言中 “x=y+z”中的 “y+z”的汇编代码是什么样的。 有没有搞VC++的朋友想学习JAVA的 如何释放EXCEL所占的内存?
如果有异常,那么
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
TRACE("Error\n");
TRACE("Code = %08lx\n", e.Error());
TRACE("Code meaning = %s\n", e.ErrorMessage());
TRACE("Source = %s\n", (LPCSTR) bstrSource);
TRACE("Description = %s\n", (LPCSTR) bstrDescription);
就可以看到错误原因了。
catch(...)
{
CString message;
DWORD ErrorCode = GetLastError() ;
char buff[128];
::FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM,(void*)FORMAT_MESSAGE_FROM_STRING,ErrorCode,0,buff,128,0);
message.Format("执行文件:%s错误,发生在:%d 行,错误描述为:%s",__FILE__,__LINE__,buff);
MessageBox((LPCTSTR)message,"Error",MB_ICONERROR | MB_OK);
}
e.Error()等于什么时重连?呜呜~~
捕获到了错误,但是具体哪些错误需要重连呢?我只知道拔网线和关数据库,其他还有什么情况呢?
e.Error()等于什么时重连?呜呜~~
这个也正是我头疼的问题。我把数据库关了,得到的错误是数据库未定义的错误号,我也不知道如何检查数据库已经断了。关于这个问题,我发过帖子,也未能得到答案。
关注中
catch
{
AfxMessageBox(e.Description());
}
_ConnectionPtr中有个error集合,可以通过error的GetDescription获取错误信息.
{}
catch(_com_error e)
{
e.discription;
}
ReExecute:
if (mtCallProc.Lock() == 0)
{
delete[]pFileInfo;
CDB::LogEvents(sAppName,EVENTLOG_ERROR_TYPE,"\nCan not lock proc!");
return -1;
}
sErr = db->CallProcedure(proc,&rs);
//connect halt
if (sErr!="OK")
{
CDB::LogEvents(sAppName,EVENTLOG_ERROR_TYPE,"\n"+sErr);
if ((sErr.Find("ORA-12571") != -1) || (sErr.Find("ORA-03114") != -1) || (sErr.Find("DB Connection Is Invalid") != -1))
{
ReConnect:
strcpy(cTem,"");
if (db->ConnectDB(cTem,sizeof(cTem))<0)
{
iReConnectTimes++;
if (iReConnectTimes < 4)
{
goto ReConnect;
}
}
else
{
mtCallProc.Unlock();
goto ReExecute;
}
}
}
mtCallProc.Unlock();