关于数据库_ConnectionPtr Execute的问题,急急急急急急急急急急急急!!

yierham 2010-11-19 10:34:11
由于程序中要频繁的操作数据库,我使用ADO的方式建立了一个连接,服务器上的数据库是oracle
_ConnectionPtr m_pConnection是一个全局变量,测试过程中我发现,我频繁的调用Execute去插入字段和更新字段后,我去服务器端看这个连接的情况,发现很占oracle的内存,请教大家这个是什么原因
我用ps aux |grep oracle|grep LOCAL=NO 这个命令看的,这个连接所占oracle的资源在一直增加,

如果使用操作后再关闭连接,需要操作数据库的时候再去建立连接的话,效率就太低了,因为我要频繁的操作数据库
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yierham 2010-11-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 majy 的回复:]

Connection是个全局变量是没有关系的,关键在于你的 rs需要关闭再连接,比如说,你用rs进行了一次查询,那要先关闭,再创建新的rs进行其他的操作
[/Quote]这个跟JAVA不一样
_RecordsetPtr rs;
rs=m_pConnection->Execute(strSql.GetBuffer(),&RecordsAffected,adCmdText);
if (rs!=NULL)
{
rs->Close();
}
我一关闭就报错
yierham 2010-11-20
  • 打赏
  • 举报
回复
rs?能不能说详细一点点啊,VC里面怎么关闭RS?
yierham 2010-11-20
  • 打赏
  • 举报
回复
_RecordsetPtr rs;
rs=m_pConnection->Execute(strSql.GetBuffer(),&RecordsAffected,adCmdText);
if (rs!=NULL)
{
rs.Release();
rs=NULL;
}这样关闭就没有问题了,但是服务器上内存还是一直在增加,不知道我这样写有没有问题,请大家帮忙看看呀
yierham 2010-11-20
  • 打赏
  • 举报
回复
if (rs!=NULL&&rs-> GetState() == adStateOpen)
{
rs->Close();
rs=NULL;
}
这一句不该这样写,这样写,rs->Close();根本就没有调用
yierham 2010-11-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yierham 的回复:]

_RecordsetPtr rs;
rs=m_pConnection->Execute(strSql.GetBuffer(),&RecordsAffected,adCmdText);
if (rs!=NULL&&rs-> GetState() == adStateOpen)
{
rs->Close();
rs=NULL;
}
[/Quote]这样关闭了,但是内存还是一直在增加,明天继续来关注这个问题
yierham 2010-11-20
  • 打赏
  • 举报
回复
_RecordsetPtr rs;
rs=m_pConnection->Execute(strSql.GetBuffer(),&RecordsAffected,adCmdText);
if (rs!=NULL&&rs-> GetState() == adStateOpen)
{
rs->Close();
rs=NULL;
}
majy 2010-11-19
  • 打赏
  • 举报
回复
Connection是个全局变量是没有关系的,关键在于你的 rs需要关闭再连接,比如说,你用rs进行了一次查询,那要先关闭,再创建新的rs进行其他的操作

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧