各位高手,我又做了一个最简单的测试程序,如下所示
调用下面的操作数据库函数之前,如果数据库断开了,捕获完了异常后,在函数返回前报
Unhandled exception in dbtest.exe (MFC42D.DLL): 0xC0000005: Access Violation。原帖见http://topic.csdn.net/u/20100501/02/f625bc01-48e7-4b25-ad62-422bdd50e3cf.html?seed=324874811&r=65147440#r_65147440谁能提供解决方法?解决后再另开新帖加100分!加上本帖共250分!代码示例:void CDbtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
try
{
//打开数据表
HRESULT hr = m_pRecordset->Open( "SELECT * FROM t_test",
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText
);
if (!SUCCEEDED(hr))
{
return;
}
}
catch(_com_error &e)
{
//关闭记录集
if (m_pRecordset->State)
{
m_pRecordset->Close();
}
}
}
调用下面的操作数据库函数之前,如果数据库断开了,捕获完了异常后,在函数返回前报
Unhandled exception in dbtest.exe (MFC42D.DLL): 0xC0000005: Access Violation。原帖见http://topic.csdn.net/u/20100501/02/f625bc01-48e7-4b25-ad62-422bdd50e3cf.html?seed=324874811&r=65147440#r_65147440谁能提供解决方法?解决后再另开新帖加100分!加上本帖共250分!代码示例:void CDbtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
try
{
//打开数据表
HRESULT hr = m_pRecordset->Open( "SELECT * FROM t_test",
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText
);
if (!SUCCEEDED(hr))
{
return;
}
}
catch(_com_error &e)
{
//关闭记录集
if (m_pRecordset->State)
{
m_pRecordset->Close();
}
}
}
void CDbtestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
try
{
//打开数据表
HRESULT hr = m_pRecordset->Open( "SELECT * FROM t_test",
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText
);
if (!SUCCEEDED(hr))
{
return;
}
}
catch(_com_error &e)
{
//关闭记录集
m_pRecordset->PutActiveConnection(NULL); //这里加这句试一试
m_pRecordset->Close();}
}
m_pRecordset->PutActiveConnection(NULL);
这种写法编译通不边,我改成下面的写法,执行时直接就报异常了,应该是不能将活动连接置为NULL
_variant_t var;
var.vt = VT_NULL;
m_pRecordset->PutActiveConnection(var);
m_pRecordset.CreateInstance(__uuidof(Recordset));我式了一下断开连接调m_pRecordset->Close()等都不会出问题。
{
HRESULT hr = m_pRecordset->Open( "SELECT * FROM t_test",
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText
);
}
catch(_com_error &e)
{
CString strTips;
strTips.Format("错误编号=[%08lx], 错误信息=[%s], 错误源[%s], 错误描述[%s]",
e.Error(),
e.ErrorMessage(),
(LPCSTR)e.Source(),
(LPCSTR)e.Description());
MessageBox(strTips);
}
具体原因还不知道,其它的PutCollect和GetCollect也一样就好了,期待有人能说明白