自定义的数据库类:Class DataBase 收藏
 class DataBase
{
private:
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_res;
_variant_t rec_affected;
char m_cConstr[16];
char m_cUserName[32];
char m_cPassword[32];
bool m_bOpenType;
public:
DataBase();
~DataBase();
void REOpen();
bool IsOpen();
bool OpenDB( char *pContStr, char *pSbName, char *pSbPw );
bool OpenDB( char *pContStr );
bool GetData( char *pSqlStr, _RecordsetPtr &res );
bool Execute( char *pSqlStr );
bool NoneRetOpen( char *pSqlStr );
bool CommandPro( char *pProName );
_ConnectionPtr& GetConnection();
void CloseDB();
};

<< CPP >>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")
#include <objbase.h>
#include "CDataBase.h"

DataBase::DataBase()
{
CoInitialize(NULL);
m_pConnection = NULL;
m_pCommand = NULL;
m_pConnection.CreateInstance(__uuidof(Connection));
m_res.CreateInstance(__uuidof(Recordset));
}

DataBase::~DataBase()
{
CloseDB();
if(m_res->GetState() == adStateOpen)
m_res->Close();
m_res.Release();
m_res = NULL;
m_pConnection.Release();
m_pConnection = NULL;
CoUninitialize();
}

_ConnectionPtr& DataBase::GetConnection()
{
return m_pConnection;
}

bool DataBase::OpenDB( char *pContStr, char *pSbName, char *pSbPw )
{
try
{
if(m_pConnection->State)
return TRUE;
// 打开本地Access库text.mdb
m_pConnection->Open( (_bstr_t)pContStr, pSbName, pSbPw, adModeUnknown );
if( m_pConnection->State != adStateOpen )
return FALSE;
m_pConnection->put_ConnectionTimeout(long(10));//设置超时
m_pConnection->put_CommandTimeout(long(25));

m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection;
strcpy( m_cConstr, pContStr );
strcpy( m_cUserName, pSbName );
strcpy( m_cPassword, pSbPw );

m_bOpenType = TRUE;
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

bool DataBase::OpenDB( char *pContStr )
{
try
{
if(m_pConnection->State)
return TRUE;

m_pConnection->ConnectionString="File Name=.\\DBConn.udl";
m_pConnection->PutConnectionTimeout(10);
m_pConnection->PutCommandTimeout(25);

m_pConnection->Open("","","",NULL);

if( m_pConnection->State != adStateOpen )
return FALSE;

m_bOpenType = FALSE;
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection = m_pConnection;
strcpy( m_cConstr, pContStr );
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

VOID DataBase::CloseDB()
{
if(m_pConnection==NULL) return;
if(IsOpen())
m_pConnection->Close();
}

bool DataBase::Execute( char *pSqlStr )
{
if(!IsOpen()) return FALSE;
try
{
m_pConnection->Execute( pSqlStr,&rec_affected,0 );
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

bool DataBase::NoneRetOpen( char *pSqlStr )
{
if(!IsOpen()) return FALSE;

if(m_res->GetState() == adStateOpen)
m_res->Close();
try
{
m_res->Open(pSqlStr,m_pConnection.GetInterfacePtr(),adOpenForwardOnly ,adLockReadOnly,adCmdText);
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

bool DataBase::CommandPro( char *pProName )
{
if(!IsOpen()) return FALSE;
try
{
m_pCommand->CommandText = pProName;
m_pCommand->Execute(NULL,NULL, adCmdText);
}
catch(_com_error *e)
{
MessageBox( NULL, e->ErrorMessage(), "", MB_OK );
return FALSE;
}
return TRUE;
}
/*
bool DataBase::CommandPro( char *pProName )
{
if(!IsOpen()) return FALSE;
try
{
m_pCommand->CommandText = pProName;
m_pCommand->Execute(NULL,NULL, adCmdText);
}
catch(_com_error *e)
{
MessageBox( NULL, e->ErrorMessage(), "", MB_OK );
return FALSE;
}
return TRUE;
}
*/

bool DataBase::IsOpen()
{
try
{
return (m_pConnection != NULL && (m_pConnection->State & adStateOpen));
}
catch(_com_error e)
{
return FALSE;
}
}

void DataBase::REOpen()
{
try
{
if (m_pConnection->State != adStateOpen)
m_pConnection->Open( m_cConstr, m_cUserName, m_cPassword, adModeUnknown);
}
catch(_com_error e)
{
}
}

bool DataBase::GetData( char *pSqlStr ,_RecordsetPtr &res )
{
if(!IsOpen()) return FALSE;

if(res->GetState() == adStateOpen)
res->Close();
try
{
res->Open(pSqlStr,m_pConnection.GetInterfacePtr(),adOpenForwardOnly ,adLockReadOnly,adCmdText);
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/johnny_83/archive/2007/07/22/1701801.aspx

转载于:https://www.cnblogs.com/RivuletAmongHill/archive/2011/05/05/2037442.html

c++自定义的数据库类相关推荐

  1. java 异常处理的关键字_java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类...

    packagecn.kecheng;importjava.util.Scanner;/**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中通过异常 ...

  2. django authentication_classes自定义权限验证类 authenticate

    什么是身份认证 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或与其签名的令牌)关联的机制. 视图的最开始处运行身份验证 在权限和限制检查发生之前,以及在允许继续执行任何其他代码之前,始终在视 ...

  3. Django中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结

    Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):sname=m ...

  4. 同时支持三个mysql+sqlite+pdo的php数据库类_同时支持三个MySQL+SQLite+PDO的PHP数据库类...

    PHP学习教程文章简介: 同时支持三个MySQL+SQLite+PDO的PHP数据库类使用方法: // mysql connect $db = new SQL(mysql:host=localhost ...

  5. mysql 定义class_MySQL数据库类的定义

    俗话说好的开始是成功的一半,而PHP+MySQL项目中数据库的操作是重点之一,能否简化数据库操作程序的编写,就成了影响工作效率的关键之一. 所以小阳并不是一开始就做页面,而是先建立一个dbclass. ...

  6. python 多线程 类_Python中如何自定义一个多线程类呢?

    摘要: 下文讲述Python中自定义一个多线程类的方法分享,如下所示: 实现思路: 1.定义一个类继承threading.Thread 2.在自定义类中构造函数重写run方法 例: Python3中自 ...

  7. CodeIgniter自带的数据库类使用介绍

    为什么80%的码农都做不了架构师?>>>    在 CodeIgniter 中,使用数据库是非常频繁的事情.你可以使用框架自带的数据库类,就能便捷地进行数据库操作. 初始化数据库类 ...

  8. oracle设置缓存大小设置多少,【数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※】...

    [数据库类※从V$DB_CACHE_ADVICE中设置数据缓冲大小※]     Oracle 9i引入了一个新的途径来预测数据缓冲cache中附加数据缓存的所带来的好处的多少.V$DB_CACHE_A ...

  9. 安卓开发37:自定义的HorizontalScrollView类,使其pageScroll的时候焦点不选中

    自定义一个HorizontalScrollView类,主要为了让这个HorizontalScrollView不能鼠标点击,不能左右按键,并且没有焦点. public class ImageMoveHo ...

最新文章

  1. python列表常用方法
  2. 移动IM开发指南2:心跳指令详解
  3. boost::gil::generate_gaussian_kernel用法的测试程序
  4. c语言程序中的错误可分为,《C语言程序设计(本)》模拟试卷1.doc
  5. python json转换字典_Python json转字典字符方法实例解析
  6. ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名
  7. (一)为什么要在时间序列数据上使用AI?
  8. 发那科机器人点位编辑_FANUC机器人:参考位置功能介绍与设定方法
  9. UVA-572-搜索基础题
  10. python有趣小程序-第一个有趣的python小程序
  11. unity黑白滤镜_Unity NGUI图片去色黑白效果
  12. QQ影音播放.flv文件只有声音没有画面解决办法
  13. POS58 票据热敏打印机,怎么用ESC/POS命令控制打印文字大小?
  14. 计算机专业监理员工作,监理员是干什么的
  15. [渝粤教育] 宁波城市职业技术学院 插花艺术 参考 资料
  16. JAVA集合中常见的List和Map用法
  17. COLDFUSION
  18. AndroidIOS APP启动速度专项测试方法
  19. Codeforces Round #583 E Petya and Construction (构造)
  20. 听见丨哈罗单车完成10亿元人民币D2轮融资,复星领投 场景化AI应用服务公司百可录完成A轮融资

热门文章

  1. shell中单引号的嵌套
  2. fin.is_open()与fin.open()有什么区别?
  3. mybaits十五:使用trim自定义字符串的截取规则
  4. 汇编: 使用ds data
  5. pom.xml内容没有错,但一直报错红叉 解决办法
  6. php--点赞功能的实现
  7. 浏览器标准模式与怪异模式的区别
  8. Java 8 的 JVM 有多快?Fork-Join 性能基准测试
  9. Ejabberd源码解析前奏--管理
  10. 一、什么是hadoop?