我的一个COM进行数据库的操作,其中有Save方法进行结果集的保存。由于主键的限制,不能有重复的代码。我在COM中是这样做的。
STDMETHODIMP CBaseTableM::Save(_Recordset *pRs)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
_ConnectionPtr Con;
HRESULT hr=S_OK;
try
{
Con.CreateInstance(__uuidof(Connection));
Con->CursorLocation=adUseClient;
Con->Open((_bstr_t)cDSN,"","",-1);
pRs->PutRefActiveConnection(Con); hr=pRs->UpdateBatch( adAffectAll );
pRs ->PutRefActiveConnection( NULL );
if( Con ->GetState() == adStateOpen )
Con ->Close();
Con = NULL;
}
catch(_com_error &e)
{
// Error(_com_util::ConvertBSTRToString(e.Description()));
}
catch(...)
{
// Error("未知错误!");
}
//提交事务
if (m_spObjectContext)
{
if(FAILED(hr))
m_spObjectContext->SetAbort();
else
m_spObjectContext->SetComplete();
}
return hr;
}
这个方法在VB中调用时由于插入重复的代码会出现提示:违反了pRIMARY KEY约束...
可是在VC中调用时用
catch(_com_error &e)
{
         CString strError;
strError.Format("Run-time error '%d(%x)'",e.Error(),e.Error());
strError+="\n\n";
strError+=e.Description ();
AfxMessageBox(strError);
}捕捉时e.Description()的值是空,我如何得到错误信息?