Ado的特殊使用方法

来源:互联网 发布:笔记本电脑录屏软件 编辑:程序博客网 时间:2024/04/28 21:57

1、建立数据库

BOOL CDataConfigCls::CreateDataBase(CString &szFileName,LPCSTR szCnn/* =NULL*/)
{
 CString strCnn;
 if(szCnn==NULL)
 {
  CString strTmp = m_strAppPath+"//"+szFileName;
  CFileFind  chFind;
  if(!chFind.FindFile(strTmp))
  {
   ADOX::_CatalogPtr  pAdoX=NULL;//不用RELEASE,自动会释放
   try{
   
    pAdoX.CreateInstance(_T("ADOX.Catalog"));
    strTmp.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"),m_strAppPath+"//"+szFileName);
    pAdoX->Create((LPCTSTR)strTmp);//创建数据库
   }
   catch (...) {
    return FALSE;
   }
  }
  m_strDbFile = m_strAppPath+"//"+szFileName;
  strCnn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+m_strDbFile+";Persist Security Info=False;";
 }
 else
 {
  strCnn =szCnn;
 }

 try
 {
  
  m_pCnn.CreateInstance(__uuidof(Connection));
  m_pCnn->Open((LPCSTR)strCnn,"","",adConnectUnspecified);

 }
 catch(_com_error e)
 {
  return FALSE;
 }
 return CreateTable();
 
}

2-判断表是否存在
BOOL CDataConfigCls::TableExisted(CString &tableName)
{
 if(adStateOpen!=m_pCnn->State) return FALSE;
 try
 {
  _RecordsetPtr pRst = NULL;
  pRst = m_pCnn->OpenSchema(adSchemaTables);
  _variant_t vtTmp;
  vtTmp = "TABLE_TYPE='TABLE'";
  pRst->put_Filter(vtTmp);
  if(NULL==pRst) return FALSE;
  if(pRst->GetRecordCount()>0)
   pRst->MoveFirst();
  
  CString szTmp;
  while (!pRst->adoEOF) {
   vtTmp=pRst->GetCollect("TABLE_NAME");
   szTmp = vtTmp.vt==VT_NULL?"":(char*)(_bstr_t)vtTmp;
   szTmp.MakeUpper();
   tableName.MakeUpper();
   if( szTmp==tableName)
   {
    return TRUE;
   }
   pRst->MoveNext();
  }
 }
 catch (_com_error e) {
  return FALSE;
 }
 return FALSE;
}