//环境Windows XP SP3+VS2010 UNICODE
//头文件ADOConn.h

#pragma once

#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace  \
rename("EOF","adoEOF") rename("BOF","adoBOF")
class ADOConn
{
public:
ADOConn(void);
~ADOConn(void);
void OnInitADOConn();
void ExitConnect();
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQl);
//
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
};
//实现文件ADOConn.cpp
#include "StdAfx.h"
#include "ADOConn.h"
ADOConn::ADOConn(void)
{
}
ADOConn::~ADOConn(void)
{
}
void ADOConn::OnInitADOConn()
{
//初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
TCHAR szFilePath[MAX_PATH + 1];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
(_tcsrchr(szFilePath, _T('\\')))[1] = 0;             //删除文件名,只获得路径。
CString dbpath= szFilePath;
TRACE1("dbpath = %s\n",dbpath);
//Access 2003
//_bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver(*.mdb)};DBQ=nkj.mdb;";    //Access 2003标准链接  
//_bstr_t strConnect  = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=C:\App1\你的数据库名.mdb; Exclusive=1; Uid=你的用户名; Pwd=你的密码;"  //独占方式连接
_bstr_t strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + dbpath  + _T("data\\nkj.mdb;User ID=admin;Password=;");   //普通方式无密码  
//_bstr_t strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + dbpath + _T("data\\nkj.mdb;Jet OLEDB:Database Password=你的密码;");   
//普通方式,有密码 
//Access 2007
//_bstr_t strConnect =Provider="Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False; " ;   //标准安全链接
//_bstr_t strConnect =Provider="Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Jet OLEDB:Database Password=MyDbPassword;";    //包括数据库密码
//SQL Server
//_bstr_t strConnect = "Provider=SQLOLEDB; Server=127.0.0.1;Database=Mis; uid=sa; pwd=sa;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
}
void ADOConn::ExitConnect()
{
if (m_pRecordset!=NULL)
{
m_pRecordset->Close();
}
m_pConnection->Close();
::CoUninitialize();
}
_RecordsetPtr& ADOConn::GetRecordset(_bstr_t bstrSQL)
{
try
{
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 RecordAffected;
try
{
if (m_pConnection == NULL)
{
OnInitADOConn();
}
m_pConnection->Execute(bstrSQL,NULL,adCmdText /*文本命令*/);
return TRUE;
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
}
}
//简单用法,记得在XXX.CPP添加  #include "ADOConn.h"
BOOL CXXX::OnInitDialog()
{
  //其他代码
m_listUser.SetExtendedStyle
(m_listUser.GetExtendedStyle()|LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES | LVS_EX_ONECLICKACTIVATE);
m_listUser.InsertColumn(0, _T("#"), LVCFMT_LEFT,20);
m_listUser.InsertColumn(1, _T("用户"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(2, _T("性别"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(3, _T("职务"), LVCFMT_LEFT, 60);
m_listUser.InsertColumn(4, _T("用户类型"), LVCFMT_LEFT, 80);
ADOConn  m_AdoConn;
//open database
m_AdoConn.OnInitADOConn();
CString  sql;
sql.Format(_T("select* from tbUser order by No desc"));
_RecordsetPtr   m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordset((_bstr_t)sql);
//遍历记录集
while(m_AdoConn.m_pRecordset->adoEOF  == 0)
{
m_listUser.InsertItem(0,_T(""));
m_listUser.SetItemText(0,0,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("No"));
m_listUser.SetItemText(0,1,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("user"));
m_listUser.SetItemText(0,2,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("sex"));
m_listUser.SetItemText(0,3,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("position"));
m_listUser.SetItemText(0,4,(TCHAR *)(_bstr_t)m_pRecordset->GetCollect("permissions"));
m_pRecordset->MoveNext();
}
m_AdoConn.ExitConnect();
  //其他代码
return TRUE;  // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}

VC动态链接数据库类ADOConn相关推荐

  1. ADO 动态链接数据库

    ADO(ActiveX Data Objects)是基于组件的数据库编程接口,它是一个和编程语言无关的COM组件系统. 下面内容转载自:http://www.vckbase.com/document/ ...

  2. myeclipse链接数据库,SQL语句实现增删改查

    1.创建properties文件 #oracle #driver=oracle.jdbc.OracleDriver #url=jdbc\:oracle\:thin\:@localhost\:1521\ ...

  3. 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现...

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x0n 前言简述 知识引入 Lua模块指令阶段 0x01 部署环境 安装说明 安 ...

  4. XCTF-攻防世界CTF平台-Reverse逆向类——56、tar-tar-binks(Mac平台下的64位动态链接共享库.dylib逆向)

    目录标题 一.解压缩 二.查看文件 三.分析程序 四.程序主要逻辑: 五.逆向思路: 步骤一: 步骤二: 六.解密代码: 题目提供了两个文件flag.tar和libarchive.dylib 一.解压 ...

  5. 一个好用的ODBC数据库类CMYODBC

    一个好用的ODBC数据库类CMYODBC 一.引言 感觉MFC的CRecordset类不是很好用,因为我们要想使用的话必须为每个查询从CRecordset类派生出一个新类,或者进行动态数据交换.在VC ...

  6. 9.动态生成实体类,根据XML模板使用Emit生成动态类绑定到DataGrid

    在实际项目中,我们可能会遇到用户自定义XML模板字段,根据这个模板上的字段来显示相应的字段的值到DataGrid.在这种情况下,需要使用 XmlReader解析获取这个用户自定义的XML模板上有哪些字 ...

  7. VC++的链接错误LNK2001

    VC++的链接错误LNK2001 学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过.产生连接错误的 ...

  8. php动态链入,利用php的动态链接,增加搜索引擎的蜘蛛爬行速度,规则嵌入ElasticSearch泛目录...

    标签:宽度   sqlyog   lips   改变   获取   navicat   安装使用   集成   特定 前言 最近项目上需要用到搜索引擎,由于之前自己没有了解过,所以整理了一下搜索引擎的 ...

  9. Mybatis 动态切换数据库

    mybatis介绍: 每一个Mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心.SqlSessionFactory对象实例可以通过SqlSessionFactoryBu ...

最新文章

  1. log4j配置文件详解
  2. 阿里P9架构师分享:通俗易懂Redis原理,都是你没看过的
  3. 使用HashiCorp Nomad按需分配容器存储
  4. C+ 轮融资发布会抽奖名单公布,还有 20 万礼物正在路上
  5. Android 5.x Theme 与 ToolBar 实战
  6. JAVA后端面试100 QA之第一篇
  7. [云框架]KONG API Gateway v1.5 -框架说明、快速部署、插件开发
  8. Angular Service
  9. Android7.1 Audio的FW和HAL层dump PCM数据(三十七)
  10. [LuoguP1360][USACP07MAR]黄金阵容均衡
  11. javaScript编码
  12. 图片复印如何去除黑底_如何去除扫描件的底色? 扫描的图片去除背面的阴影的方法...
  13. 深度学习、目标检测相关博客链接
  14. 中国电信翼支付网关接口接入
  15. 民谣吉他音源 OTS Evolution Acoustic Guitar Steel Strings 2 Kontakt
  16. HDU n^n求最高位
  17. Linux minerd木马清除(续)
  18. xcode8 cocoapods 执行 pod spec lint 报错
  19. 没有密码,如何清除PPT的限制编辑?
  20. c语言关键字中英翻译机课程设计,课程设计--C语言关键字中英翻译机.doc

热门文章

  1. [共享]一个文件上传的控件,绝对是精品源码
  2. java 如何知道对象是否被修改过_Java 并发编程:AQS 的原子性如何保证
  3. kafka消费者如何读同一生产者消息_Kafka入门之生产者消费者
  4. java类的修改三个方面_Java 编程的动态性,第 6 部分: 利用 Javassist 进行面向方面的更改--转载...
  5. Water Balance CodeForces - 1300E
  6. 千万别用树套树(线段树)
  7. 一口气放出三篇SIGIR论文!详解阿里妈妈搜索广告CTR模型演进
  8. chrome jquery ajax请求,jQuery.ajax在Chrome中无法正常执行的解决办法
  9. tf.nn.dropout和tf.keras.layers.Dropout的区别(TensorFlow2.3)与实验
  10. python编程教程if_Python编程:从入门到实践——【作业】——第五章(if语句)...