数据库类操作之前封装

ADOConn.h 文件:

// ADOConn.h: interface for the ADOConn class.
//
//

#if !defined(AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_)
#define AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "RxRecordset.h"

class ADOConn 
{
public:
 ADOConn();
 virtual ~ADOConn();

 void OnInitADOConn();//初始化连接数据库
 //执行查询
 _RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
 _ConnectionPtr GetConnection();
 //执行SQL语句,Insert Update _variant_t
 BOOL ExecuteSQL(_bstr_t bstrSQL);
 void ExitConnect();
 CString AutoNumber(CString sTable, CString sFieldName, CString sCode,int Style);
 int GetRecordCount(_RecordsetPtr pRst);
private:
 _ConnectionPtr m_pCon;
 _RecordsetPtr m_pRs;
};
#endif // !defined(AFX_ADOCONN_H__0CD30419_D230_4F42_BBCC_E118D4238231__INCLUDED_)

ADOConn.cpp 文件: 

// ADOConn.cpp: implementation of the ADOConn class.
//
//

#include "stdafx.h"
#include "ADOConn.h"
#include "MainFrm.h"
#include "AppFullPath.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}

void ADOConn::OnInitADOConn()
{
 ::CoInitialize(NULL);
    _bstr_t bstrConnect;
 

 CString strConnect;
 char m_pzUser[128];     //登录数据库用户
 char m_pzPassWord[128]; //登录数据库密码
 char m_pzDataBase[128]; //登录数据库名称
 char m_pzServer[128]; //服务器名称
  CAppFullPath dlgpath;
    CFileFind finder;
 BOOL finded;
 CString databasepath;
    databasepath=dlgpath.GetDatabasePath();
 finded=finder.FindFile(databasepath);
 HRESULT hr;
 try
 {
  m_pCon.CreateInstance(__uuidof(Connection));
  m_pCon->CursorLocation =adUseClient;
  if(!finded)
  {
   AfxMessageBox("数据库检查失败!");
   return;
  }
  GetPrivateProfileString("OPTION", "Server", "(local)", m_pzServer, sizeof(m_pzServer), databasepath) ;
  GetPrivateProfileString("OPTION", "DataBase", "WebGoServer", m_pzDataBase, sizeof(m_pzDataBase), databasepath) ;
  GetPrivateProfileString("OPTION", "UserId", "sa", m_pzUser, sizeof(m_pzUser),  databasepath) ;
  GetPrivateProfileString("OPTION", "PassWord", "sa", m_pzPassWord, sizeof(m_pzPassWord), databasepath) ;
  
  strConnect.Format("driver={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",
   m_pzServer, m_pzUser, m_pzPassWord, m_pzDataBase);

        hr = m_pCon.CreateInstance(__uuidof(Connection));//创建Connection对象
  if(SUCCEEDED(hr))
  {
   m_pCon->ConnectionString=(_bstr_t)strConnect;

   hr = m_pCon->Open("","","",adModeUnknown);
  }
  
 }
 catch(_com_error e)///捕捉异常
 {
  CString errormessage;
  errormessage.Format("连接数据库失败!/r/n错误信息:%s",e.ErrorMessage());
  ::MessageBox(NULL, errormessage, "ERROR", MB_OK|MB_ICONERROR);
  CMainFrame *p=(CMainFrame *)AfxGetApp()->m_pMainWnd;
  p->DestroyWindow();
 }
}

_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
 try
 {
  //连数据库,如果Connection对象为空,则重新连数据库
        if(m_pCon==NULL)
           OnInitADOConn();
  //创建记录集对象
  m_pRs.CreateInstance(__uuidof(Recordset));
  m_pRs->Open(bstrSQL,m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 }
    //捕捉异常
    catch(_com_error *e)
  {
   AfxMessageBox(e->Description());
  }
 //返回记录集
 return m_pRs;
}

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
 try
 {
  if(m_pCon==NULL)
   OnInitADOConn();
  m_pCon->Execute(bstrSQL,NULL,adCmdText);
  return true;
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.Description());
  return false;
 }
}

_ConnectionPtr ADOConn::GetConnection()
{
 return m_pCon;
}

void ADOConn::ExitConnect()
{
    if(m_pRs!=NULL)
  m_pRs->Close();
 m_pCon->Close();
 //释放环境
 ::CoUninitialize();
}

CString ADOConn::AutoNumber(CString sTable, CString sFieldName, CString sCode,int Style)
{
 
 CString sNewNumber;
 return sNewNumber;
}

int ADOConn::GetRecordCount(_RecordsetPtr pRst)
{
    int count=0;
 try
 {
  pRst->MoveFirst();
 }
 catch(...)
 {
  return 0;
 }
 while(!pRst->adoEOF)
 {
  pRst->MoveNext();
  count=count+1;
 }
 pRst->MoveFirst();
 return count;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值