ADO数据库连接_ConnectionPtr时崩溃问题???急!!!!

baidu_20174125 2015-06-25 03:22:32
try
{
if(m_pCommand != NULL)
{
m_pCommand.Release();
m_pCommand.Detach();
m_pCommand = NULL;
}
if(m_pConnection != NULL)
{
if (m_pConnection->State)
{
m_pConnection->Close();
}
m_pConnection.Release();//这里出错
m_pConnection.Detach();
m_pConnection = NULL;
}
}
catch(_com_error /*&e*/)
{
//HandleError(e, lpstrSQL);
return FALSE;
}
执行后奔溃处是在
void Release()
{
if (m_pInterface == NULL) {
_com_issue_error(E_POINTER);
}
else {
m_pInterface->Release();//这里崩溃。。。
m_pInterface = NULL;
}
}

我试了下:1.如果单独注释掉记录集中的Release()后,就会正常运行,没错。
2.如果注释掉Detach()或m_pConnection = NULL二者中的一个同样会报错。而且错误都在同一个地方。
3.对_CommandPtr命令指针怎么都不会报错崩溃。。
网上查了下还是没弄明白为什么?如果单纯的去掉release是可以解决,但这样会不会造成内存泄露呢?
如果知道记录集具体什么时候开辟空间什么时候释放的大神,请务必解释下,谢谢。
...全文
861 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_20174125 2016-08-24
  • 打赏
  • 举报
回复
过去很长时间了,忘了结贴了。 这个问题最后的原因也没弄明白,虽然解决了,但是还是看不出这里为什么出错。
worldy 2015-06-26
  • 打赏
  • 举报
回复
你调用m_pInterface->Release();//这里崩溃。。。干嘛? m_pInterface=NULL会自己调用的,不然还怎么叫智能指针?
baidu_20174125 2015-06-26
  • 打赏
  • 举报
回复
引用 3 楼 worldy 的回复:
在app类的构造函数中加入CoInitialize 在释构函数中加入 CoUninitialize
有com的初始化啊。而且我根本就没有调用CoUninitialize函数,按理说应该不存在超出com范围吧。 听了你说的,我又试了下,在这个数据库操作类的构造函数中加入了CoInitialize在析构最后加入了CoUninitialize。可是照样不可以啊。 我这个类其他工程引用时是正常的。去掉release当然也可以正常执行,但会造成内存泄露的啊
baidu_20174125 2015-06-26
  • 打赏
  • 举报
回复
引用 9 楼 worldy 的回复:
你使用F11跟踪进去研究一下呗
m_pInterface->Release();这里之后已经F11不进去了。。。要不就不这样问了啊
worldy 2015-06-26
  • 打赏
  • 举报
回复
你使用F11跟踪进去研究一下呗
baidu_20174125 2015-06-26
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
rsPtr.Close(); rsPtr=NULL; //这个会自动调用Release
嗯,我明白了您的意思。 可是就这样去解决这个问题,心里总是别扭啊。我总要弄明白为什么调用m_pConnection.Release()会出错? 您有这方面的经验吗?猜想会是因为什么原因呢?
baidu_20174125 2015-06-26
  • 打赏
  • 举报
回复
引用 5 楼 worldy 的回复:
你调用m_pInterface->Release();//这里崩溃。。。干嘛? m_pInterface=NULL会自己调用的,不然还怎么叫智能指针?
也就是说,数据库连接用完之后只要Close就可以了不用再Release了? 那也应该是调用或者不调用都是应该不出错的吧。 问题是其他工程用完数据库连接之后关闭,执行m_pConnection.Release()没错;但当前工程调用它为什么会崩溃呢?注释掉m_pConnection.Release()是可以解决,但问题的原因不了解还是会担心程序会出问题啊
worldy 2015-06-26
  • 打赏
  • 举报
回复
rsPtr.Close(); rsPtr=NULL; //这个会自动调用Release
worldy 2015-06-25
  • 打赏
  • 举报
回复
在app类的构造函数中加入CoInitialize 在释构函数中加入 CoUninitialize
baidu_20174125 2015-06-25
  • 打赏
  • 举报
回复
求道友支持啊!
baidu_20174125 2015-06-25
  • 打赏
  • 举报
回复
没有人吗????

4,011

社区成员

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

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