打印本文 打印本文 关闭窗口 关闭窗口
ADO 方法访问数据库的封装接口(02)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1573  更新时间:2009/4/23 10:43:54  文章录入:mintao  责任编辑:mintao
 catch (...)
 {
  SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__) ;
 }
 return FALSE ;
}

//提交事务
BOOL CDBConnection::CommitTrans(void)
{
 try
 {
  if (!m_pConnImpl->isValid())
  {
   SetErrorMessage(CONNCTION_INVALIDHANDLE,__FILE__,__LINE__) ;
   return FALSE ;
  }
  DBCONNECTIONPtr->Errors->Clear();
  if (DBCONNECTIONPtr->GetState() != adStateClosed)
  {
   DBCONNECTIONPtr->CommitTrans() ;
   return TRUE ;
  }  
 }
 catch (_com_error &e)
 {
  SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__) ;
 }
 catch (...)
 {
  SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__) ;
 }
 return FALSE ;
}

//回滚事务
BOOL CDBConnection::RollbackTrans(void)
{
 try
 {
  if (!m_pConnImpl->isValid())
  {
   SetErrorMessage(CONNCTION_INVALIDHANDLE,__FILE__,__LINE__) ;
   return FALSE ;
  }
  DBCONNECTIONPtr->Errors->Clear();
  if (DBCONNECTIONPtr->GetState() != adStateClosed)
  {
   DBCONNECTIONPtr->RollbackTrans() ;
   return TRUE ;
  }  
 }
 catch (_com_error &e)
 {
  SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__) ;
 }
 catch (...)
 {
  SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__) ;
 }
 return FALSE ;
}

BOOL CDBConnection::Execute(LPCTSTR szSQL,int* pnRecordsAffected)
{
 if(szSQL == NULL)
 {
  SetErrorMessage(SQL_EMPTYSQL,__FILE__,__LINE__) ;
  return FALSE ;
 }
 else if(_tcslen(szSQL) == 0)
 {
  SetErrorMessage(SQL_EMPTYSQL,__FILE__,__LINE__) ;
  return FALSE ;
 }

 try
 {
  if (!m_pConnImpl->isValid())
  {
   SetErrorMessage(CONNCTION_INVALIDHANDLE,__FILE__,__LINE__) ;
   return FALSE ;
  }
  DBCONNECTIONPtr->Errors->Clear();
  if (DBCONNECTIONPtr->GetState() == adStateOpen)
  {
   VARIANT vRecordAffected ;
   VariantInit(&vRecordAffected) ;
   DBCONNECTIONPtr->Execute(_bstr_t(szSQL),&vRecordAffected,adExecuteNoRecords);
   if((VT_I4 == vRecordAffected.vt) && (pnRecordsAffected != NULL))
   {
    *pnRecordsAffected = (int)vRecordAffected.lVal ;
   }
   VariantClear(&vRecordAffected) ;
   return TRUE ;
  }  
 }
 catch (_com_error &e)
 {
  SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__) ;
 }
 catch (...)
 {
  SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__) ;
 }
 return FALSE ;
}

//获取数据库连接接口
BOOL CDBConnection::GetConnectionIDispatch(_variant_t& vActiveConnection)
{
 if (!m_pConnImpl->isValid())
 {
  SetErrorMessage(CONNCTION_INVALIDHANDLE,__FILE__,__LINE__) ;
  return FALSE ;
 }

 vActiveConnection = (IDispatch*)(DBCONNECTIONPtr);
 return TRUE ;
}

BOOL CDBConnection::OpenRecordSet(LPCTSTR szSQL,CDBRecordSet& rRecordSet)
{
 return rRecordSet.Open(szSQL,*this) ;
}

void CDBConnection::SetErrorMessage(LPCTSTR szErrMsg,const char* szSourceFile,int nLine)
{
 m_pConnImpl->SetErrorMessage(szErrMsg,szSourceFile,nLine) ;
}

LPCTSTR CDBConnection::GetErrorMessage(void) const
{
 return (LPCTSTR)m_pConnImpl->GetErrorMessage() ;
}

//获取数据库访问的错误信息
LPCTSTR CDBConnection::GetDBConnectionErrorMsg(void)
{      
 try
 {
  m_strConnErrorMsg.Empty() ;
  if (!m_pConnImpl->isValid())
  {
   SetErrorMessage(CONNCTION_INVALIDHANDLE,__FILE__,__LINE__) ;
   return (LPCTSTR)m_strConnErrorMsg ;
  }
  ErrorPtr pErr  = NULL;
  if( (DBCONNECTIONPtr->Errors->Count) > 0)
  {
   long nCount = DBCONNECTIONPtr->Errors->Count;

   // Collection ranges from 0 to nCount -1.
   CString strTempMsg ;
   for( long i = 0; i < nCount; i++)   
   {
    pErr = DBCONNECTIONPtr->Errors->GetItem(i);
    strTempMsg.Format(_T("Error number: %x\tError Message: %s\r\n"), pErr->Number, (LPCSTR) pErr->Description);
    m_strConnErrorMsg += strTempMsg ;
   }
  }   
 }
 catch (_com_error &e)
 {
  SetErrorMessage((LPCTSTR)e.Description(),__FILE__,__LINE__) ;
 }
 catch (...)
 {
  SetErrorMessage(EXCEPTION_UNKNOWN,__FILE__,__LINE__) ;
 } 
 return (LPCTSTR)m_strConnErrorMsg ;
}

BOOL CDBConnection::CloneTo(CDBConnection& toConnection)
{
 toConnection = *this ;
 //释放复制来的连接
 if(IsOpened())
 {
  toConnection.Close() ;
  //重新打开连接
  return toConnection.Open() ;
 }
 return TRUE ;
}

#undef DBCONNECTIONPtr

//end of  DBConnection.cpp

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口