加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ADO封装类--ADOConn.h和ADOConn.cpp

(2012-11-30 21:51:03)
标签:

杂谈

分类: 编程
为了在操作数据库的方便,将对ADO相关的操作,进行了类封装!下面将其呈现给大家,通过了本人的测试:
ADOConn.h
// ADOConn.h: interface for the ADOConn class.
 //
 //////////////////////////////////////////////////////////////////////
 #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
 
 #if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
 #define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_
 
 #if _MSC_VER > 1000
 #pragma once
 #endif // _MSC_VER > 1000
 
 class ADOConn  
 {
  // 定义变量
 public:
  //添加一个指向Connection对象的指针:
  _ConnectionPtr m_pConnection;
  //添加一个指向Recordset对象的指针:
  _RecordsetPtr m_pRecordset;
  // 定义方法
 public:
  ADOConn();
  virtual ~ADOConn();
  // 初始化—连接数据库
  void  OnInitADOConn();
  // 执行查询
  _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
  // 执行SQL语句,Insert Update _variant_t
  BOOL ExecuteSQL(_bstr_t bstrSQL);
  void ExitConnect();
 };
 
 #endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
ADOConn.cpp
// ADOConn.cpp: implementation of the ADOConn class.
 //
 //////////////////////////////////////////////////////////////////////
 
 #include "stdafx.h"
 #include "ADOConn.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()
 {
  // 初始化OLE/COM库环境
        //AfxOleInit(); 
  ::CoInitialize(NULL);
 
  try
  {
  // 创建Connection对象
  //m_pConnection.CreateInstance("ADODB.Connection");
  m_pConnection.CreateInstance(__uuidof(Connection));            
  //m_pConnection->Open("DSN=ADOmysql;Server= localhost;Database=STUDENT","root","root",adModeUnknown);
  m_pConnection->Open("Driver={MySQL ODBC 5.2w Driver};Server= localhost;Database=STUDENT","root","root",adModeUnknown);
 
 
  // 捕捉异常
  catch(_com_error e)
  {
  // 显示错误信息
  AfxMessageBox(e.Description());
  }
 }
 
 // 执行查询
 _RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL)
 {
  try
  {
  // 连接数据库,如果Connection对象为空,则重新连接数据库
  if(m_pConnection==NULL)
  OnInitADOConn();
  // 创建记录集对象
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  // 取得表中的记录
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  }
  // 捕捉异常
  catch(_com_error e)
  {
  // 显示错误信息
  AfxMessageBox(e.Description());
  }
  // 返回记录集
  return m_pRecordset;
 }
 
 // 执行SQL语句,Insert Update _variant_t
 BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
 {
  //    _variant_t RecordsAffected;
  try
  {
  // 是否已经连接数据库
  if(m_pConnection == NULL)
  OnInitADOConn();
  // Connection对象的Execute方法:(_bstr_t CommandText, 
  // VARIANT * RecordsAffected, long Options ) 
  // 其中CommandText是命令字串,通常是SQL命令。
  // 参数RecordsAffected是操作完成后所影响的行数, 
  // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
  // adCmdProc-存储过程;adCmdUnknown-未知
  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();
 }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有