当前位置:编程学习 > VC++ >>

基于ADO的VC++数据库操作类实现

作者:l4nk0r
时间:2010-1-22
功能:基于ADO数据库类实现

1.首先在stdafx.h文件添加如下代码:

// 导入ADO的动态链接库
#import "c:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")

2.实现ADOConn.h类定义

class ADOConn  
{
public:
  ADOConn();
  virtual ~ADOConn();
  _ConnectionPtr m_pConnection;
  _RecordsetPtr m_pRecordset;
  _RecordsetPtr m_pSubRecord;
  _variant_t b;
  _variant_t c;
public:
  // 初始化—连接数据库
  void  OnInitADOConn();
  // 执行查询
  _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
  // 执行SQL语句,Insert Update _variant_t
  BOOL ExecuteSQL(_bstr_t bstrSQL);
  void ExitConnect();
};

3.类的实现文件ADOConn.cpp

#include "stdafx.h"
#include "ADOConn.h"

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

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}
// 初始化数据库连接
void  ADOConn::OnInitADOConn()
{
  ::CoInitialize(NULL);
  try
  {
                               // 创建实例
    m_pConnection.CreateInstance("ADODB.Connection");
// 这里我写的是针对Access数据库的连接字符串,请相应修改
    _bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=point.mdb;Mode=ReadWrite;Persist Security Info=False";
// 打开数据库
    m_pConnection->Open(strConnect,"","",adModeUnknown);
  }
// 异常捕获
  catch(_com_error e)
  {
    AfxMessageBox(e.Description());
  }
}

// 获取记录集
_RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
  try
  {
    if(m_pConnection==NULL)
      OnInitADOConn();
    m_pRecordset.CreateInstance(__uuidof(Recordset));
// 执行sql语句得到记录集
    m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  }
  catch(_com_error e)
  {  
    AfxMessageBox(e.Description());
  }
  return m_pRecordset;
}
// 执行任意SQL语句
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
  try
  {
    if(m_pConnection == NULL)
      OnInitADOConn();
    m_pConnection->Execute(bstrSQL,NULL,adCmdText);
    return true;
  }
  catch(_com_error e)
  {
    AfxMessageBox(e.Description());
    return false;
  }
}
// 关闭数据库连接
void ADOConn::ExitConnect()
{
  if (m_pRecordset != NULL)
    m_pRecordset->Close();
  m_pConnection->Close();
  ::CoUninitialize();
}
补充:软件开发 , Vc ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,