ADO连数据操作中,出现ADO异常的情况下如何关闭记录集(m_recordset)了?

cql0007 cql0007 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
使用ADO的连接方式.

ADO类做为单例的,在初始化就已经建立好连接(m_connection)和记录集(m_recordset)了.

在不同的数据库操作的方法中直接使用连接和记录集.

例如在插入记录时:
//打开记录集:
try{
hr = m_recordset->Open(query, source, adOpenDynamic,
adLockOptimistic, adCmdText);
}

//执行插入
try{
m_recordset->AddNew();
...........

m_recordset->Update();
fields->Release();
field->Release();
m_recordset->Close();


return true;
}
catch(_com_error &e2){
CString str=(char*)e2.ErrorMessage();
str += e2.Description();
::MessageBox(NULL,str+"\r\n插入数据出错。","提示",
MB_OK | MB_ICONWARNING);

m_recordset->Close();///?????这里有问题了?
return false;
}

问题出在在catch{}语句,如果插入数据不成功,跳到catch块后,这个地方不能执行:m_recordset->Close(),一执行就导致程序死掉了.
但如果这里不关闭记录集就直接退出的话,程序是可以接着运行,但这个m_recordset没有Close掉,下次进到这个方法中时或者下次别的方法中要用到m_recordset时,一打开记录集就出错,因为这个记录集是没有关闭的
//打开记录集:
try{
hr = m_recordset->Open(query, source, adOpenDynamic,
adLockOptimistic, adCmdText);
}
//这里出错.

这样一来,就导致我的程序一出现ADO错误就会死掉.因为如何处理这个问题了?
...全文

相关推荐

评论 29
收藏 已收藏
分享
返回顶部
cql0007
数据库 4,017 成员 39,805 内容