大致情况: MFC编程 ,通过 occi接口连接Oracle数据库,执行SQL语句;在 Debug模式下程序运行正常,可以正常连接数据库,在Release模式下则报错。报错信息如下:>>Error message:Unhandled exception at 0x61f00414 in sqla.exe: 0xC0000005: Access violation reading location 0x00006d65.>>Breakpoint at mlock.c:/***
* _unlock - Release multi-thread lock
*
*Purpose:
* Note that it is legal for a thread to aquire _EXIT_LOCK1
* multiple times.
*
*Entry:
* locknum = number of the lock to release
*
*Exit:
*
*Exceptions:
*
*******************************************************************************/void __cdecl _unlock (
int locknum
)
{
/*
* leave the critical section.
*/
LeaveCriticalSection( _locktable[locknum].lock );
}
想请问一下,这个报错的原因是什么?
如何解决呢?报错部位的代码:
BOOL CCOMPDlg::SnapListCtrlShow()
{
//TODO:
m_SNAPID.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES); m_SNAPID.InsertColumn(0, "", LVCFMT_CENTER, 30);
m_SNAPID.InsertColumn(1, "Snap id", LVCFMT_CENTER, 100);
m_SNAPID.InsertColumn(2, "Instance", LVCFMT_CENTER, 90);
m_SNAPID.InsertColumn(3, "DB Name", LVCFMT_CENTER, 90);
m_SNAPID.InsertColumn(4, "Snap Level", LVCFMT_CENTER, 100); std::string szSQL, szDBNAME, szINSTANCE;
CString szSNAPID, szSNAPLEVEL;
int rowIndex = 0; Environment *pENV;
Connection *pCONN;
Statement *pSTAT;
ResultSet *pRS;
pENV = Environment::createEnvironment(); //报错位置
pCONN = pENV->createConnection("system", "system123", "//127.0.0.1:1521/hawking");
pSTAT = pCONN->createStatement();
szSQL = "select s.snap_id snap_id"\
", to_char(s.end_interval_time,'dd Mon YYYY HH24:mi') snapdat"\
", di.instance_name inst_name"\
", di.db_name db_name"\
", s.snap_level lvl "\
"from dba_hist_snapshot s"\
", dba_hist_database_instance di "\
"where di.dbid = s.dbid "\
"and di.instance_number = s.instance_number "\
"and di.startup_time = s.startup_time "\
"order by db_name, instance_name, snap_id";
pSTAT->setSQL(szSQL); try
{
//TODO:
pRS = pSTAT->executeQuery();
while(pRS->next())
{
szSNAPID.Format("%d", pRS->getInt(1));
szDBNAME = pRS->getString(3);
szINSTANCE = pRS->getString(4);
szSNAPLEVEL.Format("%d", pRS->getInt(5)); m_SNAPID.InsertItem(rowIndex, "");
m_SNAPID.SetItemText(rowIndex, 1, (LPCTSTR)szSNAPID);
m_SNAPID.SetItemText(rowIndex, 2, szINSTANCE.c_str());
m_SNAPID.SetItemText(rowIndex, 3, szDBNAME.c_str());
m_SNAPID.SetItemText(rowIndex, 4, (LPCTSTR)szSNAPLEVEL);
rowIndex++;
}
pSTAT->closeResultSet(pRS);
pCONN->terminateStatement(pSTAT);
}
catch(SQLException &e)
{
//TODO:
::MessageBox(NULL, "Error: \r\n 获取Snap id信息失败,请手动填写!", "错误提示", MB_OK);
::MessageBox(NULL, (LPCSTR)e.getMessage().c_str(), "错误提示", MB_OK);
if (pCONN != NULL)
pENV->terminateConnection(pCONN);
if (pENV != NULL)
Environment::terminateEnvironment(pENV); return FALSE;
} pENV->terminateConnection(pCONN);
Environment::terminateEnvironment(pENV); return TRUE;
}
oracledebugreleaseexception
* _unlock - Release multi-thread lock
*
*Purpose:
* Note that it is legal for a thread to aquire _EXIT_LOCK1
* multiple times.
*
*Entry:
* locknum = number of the lock to release
*
*Exit:
*
*Exceptions:
*
*******************************************************************************/void __cdecl _unlock (
int locknum
)
{
/*
* leave the critical section.
*/
LeaveCriticalSection( _locktable[locknum].lock );
}
想请问一下,这个报错的原因是什么?
如何解决呢?报错部位的代码:
BOOL CCOMPDlg::SnapListCtrlShow()
{
//TODO:
m_SNAPID.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES); m_SNAPID.InsertColumn(0, "", LVCFMT_CENTER, 30);
m_SNAPID.InsertColumn(1, "Snap id", LVCFMT_CENTER, 100);
m_SNAPID.InsertColumn(2, "Instance", LVCFMT_CENTER, 90);
m_SNAPID.InsertColumn(3, "DB Name", LVCFMT_CENTER, 90);
m_SNAPID.InsertColumn(4, "Snap Level", LVCFMT_CENTER, 100); std::string szSQL, szDBNAME, szINSTANCE;
CString szSNAPID, szSNAPLEVEL;
int rowIndex = 0; Environment *pENV;
Connection *pCONN;
Statement *pSTAT;
ResultSet *pRS;
pENV = Environment::createEnvironment(); //报错位置
pCONN = pENV->createConnection("system", "system123", "//127.0.0.1:1521/hawking");
pSTAT = pCONN->createStatement();
szSQL = "select s.snap_id snap_id"\
", to_char(s.end_interval_time,'dd Mon YYYY HH24:mi') snapdat"\
", di.instance_name inst_name"\
", di.db_name db_name"\
", s.snap_level lvl "\
"from dba_hist_snapshot s"\
", dba_hist_database_instance di "\
"where di.dbid = s.dbid "\
"and di.instance_number = s.instance_number "\
"and di.startup_time = s.startup_time "\
"order by db_name, instance_name, snap_id";
pSTAT->setSQL(szSQL); try
{
//TODO:
pRS = pSTAT->executeQuery();
while(pRS->next())
{
szSNAPID.Format("%d", pRS->getInt(1));
szDBNAME = pRS->getString(3);
szINSTANCE = pRS->getString(4);
szSNAPLEVEL.Format("%d", pRS->getInt(5)); m_SNAPID.InsertItem(rowIndex, "");
m_SNAPID.SetItemText(rowIndex, 1, (LPCTSTR)szSNAPID);
m_SNAPID.SetItemText(rowIndex, 2, szINSTANCE.c_str());
m_SNAPID.SetItemText(rowIndex, 3, szDBNAME.c_str());
m_SNAPID.SetItemText(rowIndex, 4, (LPCTSTR)szSNAPLEVEL);
rowIndex++;
}
pSTAT->closeResultSet(pRS);
pCONN->terminateStatement(pSTAT);
}
catch(SQLException &e)
{
//TODO:
::MessageBox(NULL, "Error: \r\n 获取Snap id信息失败,请手动填写!", "错误提示", MB_OK);
::MessageBox(NULL, (LPCSTR)e.getMessage().c_str(), "错误提示", MB_OK);
if (pCONN != NULL)
pENV->terminateConnection(pCONN);
if (pENV != NULL)
Environment::terminateEnvironment(pENV); return FALSE;
} pENV->terminateConnection(pCONN);
Environment::terminateEnvironment(pENV); return TRUE;
}
oracledebugreleaseexception
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货