VC++访问Oracle数据库问题
我在基于对话框的应用程序中的OnInitDialog()函数中调用了如下代码来初始化数据库:
//数据库连接初始化
using namespace ADOX;
CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordset.CreateInstance(__uuidof(Recordset));
char ConnectDataSource[200]={0};
sprintf(ConnectDataSource,"Provider=MSDAORA.1;Password=%s;User ID=%s;Data Source=%s; Persist Security Info=True",g_struLocalParam.chOraclePassWord,g_struLocalParam.chOracleUserId,g_struLocalParam.chOracleName);
if(g_struLocalParam.dwOracleId)
{
try //建立数据库连接
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open(ConnectDataSource,"","",adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("数据库连接失败!\r\n错误信息:%s", e.ErrorMessage());
AfxMessageBox(errormessage);
//return FALSE;
}
}
接下来在一个一个回调函数向数据库插入数据,每一次执行回调函数就插入一条数据到数据库,代码如下:
unsigned char Bible[]="INSERT INTO VehInfo(HPHM,CPYS,TGSJ,SFBJ,DDBJ,XCFX,JJTP,MAINPATH,XSCD,TGDD,CLSD,XS,CLBH) VALUES (";
char sql[20000]={0};
char StrPlc[50]={0};
char StrDrc[50]={0};
char StrCd[50]={0};
char StrPath[50]={0};
CString srt;
srt.Format("to_date('%s','YYYY-MM-DD HH24:MI:SS')",timePass);
sprintf(sql,"%s'%s','%s',%s,0,1,'%s','%s','%s','%s','%s',%d,%d,'%s'",Bible,strPlate,strColor,srt,sCheDaoFangXiang,strImageName,SavePath,sCheDaoHao,strPlace,speed,m_speedLimit,BianHao);
sprintf(sql,"%s)",sql);
csnapDemoDlg->m_pConnection->Execute(sql,NULL,adCmdText);
现在我想问的是 我该在程序的什么时候来执行数据库的连接的释放代码,如下
m_pConnection->close();
m_pConnection-Release();
CoUninitialize();
还有如果不执行m_pConnection->close();
m_pConnection-Release();
CoUninitialize();
这几条代码程序会出现什么问题?说明该回调函数执行次数很多,基本上时刻都会被触发执行