1 基本介绍

本文采用ADO来进行数据库的连接,ADO(ActiveX Data Objects)是ActiveX数据对象的简称,是一个访问数据库中数据的编程接口。利用ADO技术实现数据库操作主要分为以下步骤:

①引入ADO库,

②定义连接对象指针和记录集指针;

③初始化COM库;

④通过连接对象指针连接数据库;

⑤通过记录集指针访问数据库;

⑥关闭数据库连接。

⑦释放COM环境

本文将以ACCESS数据库和MySQL数据库为例,详细介绍通过ADO进行数据库访问的步骤和常见问题。

2 引入ADO库

这一步在#include语句后面,通过#import语句实现,代码固定,对于Win7系统,代码如下:

#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

3 定义连接对象指针和记录集指针

连接对象指针用来创建和数据库的连接;记录集指针用来执行SQL语句,并对SQL语句返回的数据进行操作,这两个指针是ADO技术的关键,但其定义语句固定,代码如下:

 _RecordsetPtr  m_pRecordset;    //定义连接对象指针_ConnectionPtr  m_pConnection;  //定义记录集指针

4 初始化COM组件

在使用COM库之前,必须对其进行初始化操作,代码固定,如下所示:

::CoInitialize(NULL);

5 通过连接对象指针连接数据库

这一步是ADO操作数据库的难点,分为两步进行,第一步是实例化连接对象指针,第二步是通过连接对象指针的Open方法建立与数据库的连接。

5.1 实例化连接对象指针

实例化连接对象指针有以下两种方法:

 1)m_pConnection.CreateInstance("ADODB.Connection");2)m_pConnection.CreateInstance(__uuidof(Connection));

5.2 建立与数据库的连接

5.2.1 连接ACCESS数据库

本文针对的ACCESS数据库是Win7系统自带的Microsoft Office Access 2007数据库,需要特别注意的是因为其版本为32位,因此必须将VS 2010工程的解决方案平台设置为Win32,否则如果解决方案平台为x64,采用ADO技术将无法连接ACCESS数据库。

连接ACCESS数据库共有一下三种方法:

     1)m_pConnection -> Open("Provider = Microsoft. Jet.OLEDB. 4.0;Data Source=D:\\test.mdb","","",adModeUnknown);2)m_pConnection-> Open("Provider=Microsoft. ACE.OLEDB.12.0; Data Source=D:\\test.accdb","","",adModeUnknown);3)m_pConnection->Open("DSN=TestAccess;","", "",  adModeUnknown ); //这种方法是用32位ODBC建一个数据源,起名TestAccess

第一种方法采用Jet引擎访问数据库,第二种方法采用的是ACE引擎,第二种方法既可以访问Office2007也可以访问Office97-2003。本文在D盘下存放了一个名为test的Access数据库,Access数据库的2003版本文件格式后缀为.mdb,2007版本文件格式后缀为. accdb。

第三种方法采用ODBC技术进行连接,需要注意的是,对于64位的电脑,直接通过控制面板-系统和安全-管理工具-数据源(ODBC)是无法添加Access数据源的,因为Access版本是32位,而控制面板-系统和安全-管理工具-数据源(ODBC)调用的是64位的驱动(详见补充说明),需要通过C:\Windows\systemWOW64\odbcad32.exe建立Access数据源。

补充说明:

64位win 7操作系统中,ODBC有两个:

1、C:\Windows\system32\odbcad32.exe——调用64位驱动建立数据源

2、C:\Windows\systemWOW64\odbcad32.exe——调用32位驱动建立数据源

默认控制面板-系统和安全-管理工具-数据源(ODBC)打开的是C:\Windows\system32 \odbcad32.exe。

5.2.2 连接MySQL数据库

本文连接的MySQL数据库的版本为5.6.15,64位,采用的ODBC为mysql-connector-odbc-5.2.6-winx64。

同样需要注意的是,由于MySQL数据库的版本为64位,必须将VS 2010工程的解决方案平台设置为x64,否则如果解决方案平台为Win32,将无法连接MySQL数据库。

连接MySQL数据库共有一下三种方法:

     1)m_pConnection->Open("DSN=MYSQL-ODBC; server=localhost; database= cntipm;" ,"Hector", "7777", adModeUnknown);  2)m_pConnection->Open("DSN=MYSQL-ODBC;server=localhost;","Hector", "7777", adModeUnknown);  3)m_pConnection->Open("Driver=MySQL ODBC 5.2 ANSI Driver; DATABASE=cntipm; server=localhost", "Hector", "7777",adModeUnknown);

第一二中方法基本相同,将第一种方法中的“database= cntipm”省略就是第二种方法,cntipm指的是数据库的名称,这两种方法都是通过设置ODBC建立连接的,因为在设置ODBC时指定了数据库的名称,因此“database= cntipm”可以省略。

第三种方法是参考网上的方法。

说明:

MYSQL-ODBC指的是本文建立的ODBC数据源的名称,Hector是用户名,7777是密码,MySQLODBC 5.2 ANSI Driver指的是本文所安装的mysql-connector- odbc-5.2.6-winx64驱动。

6 通过记录集指针访问数据库

这部分代码相对固定,具体代码如下:

     m_pRecordset.CreateInstance(_uuidof(Recordset));m_pRecordset->Open(_bstr_t("SELECT * FROM School"),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

如果想进一步输出查到的数据,可以进行如下操作:

 while (!m_pRecordset->adoEOF){_variant_t NameVal = m_pRecordset->GetCollect("SchoolName");//m_pRecordset->PutCollect("Number",77);//设置Number列的每一个数都是77string strTemp = (char*)(_bstr_t)NameVal;cout<<strTemp.c_str()<<endl;m_pRecordset->MoveNext();}

7 关闭数据库连接

 //关闭数据库连接if (m_pRecordset->GetState() == adStateOpen){m_pRecordset->Close();}m_pConnection->Close();m_pConnection.Release();

8 释放COM环境

::CoUninitialize();

9 完整代码示范

#include <tchar.h>
#include <iostream>
#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")using namespace std;int main(void)
{_RecordsetPtr  m_pRecordset;   //定义连接对象指针_ConnectionPtr  m_pConnection;  //定义记录集指针::MessageBox(NULL,_T("准备连接数据库"),_T("提示"),MB_OK|MB_ICONWARNING);//COM初始化::CoInitialize(NULL);m_pConnection.CreateInstance("ADODB.Connection");//m_pConnection.CreateInstance(__uuidof(Connection));//Connection用于与数据库服务器的链接另一种方式try{//以下两句代码用来连接ACCESS数据库,前提是配置管理器只能是Win32//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\test.accdb","","",adModeUnknown);//m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\test.accdb","","",adModeUnknown);//m_pConnection->Open("DSN=TestAccess;","", "", adModeUnknown);//这种方法是用32位ODBC建一个数据源,起名TestAccess//以下三种连接方式均可连接MySQL数据库,通过ODBC连接,前提是配置管理器只能是x64m_pConnection->Open("DSN=MYSQL-ODBC;server=localhost;database=cntipm;","Hector", "7777", adModeUnknown);  //m_pConnection->Open("DSN=MYSQL-ODBC;server=localhost;","Hector", "7777", adModeUnknown);  //m_pConnection->Open("Driver=MySQL ODBC 5.2 ANSI Driver;DATABASE=cntipm;server=localhost","Hector", "7777",adModeUnknown);}catch (_com_error e){cout << e.Description() << endl;::MessageBox(NULL,e.Description(),_T("提示"),MB_OK|MB_ICONWARNING);::MessageBox(NULL,_T("数据库初始化错误"),_T("提示"),MB_OK|MB_ICONWARNING);}//执行SQL语句实现数据对象的操作try{m_pRecordset.CreateInstance(_uuidof(Recordset));m_pRecordset->Open(_bstr_t("SELECT * FROM School"),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);}catch (_com_error e){::MessageBox(NULL,_T("打开记录集错误"),_T("提示"),MB_OK|MB_ICONWARNING);return 0;}//读取数据库表中的数据while (!m_pRecordset->adoEOF){_variant_t NameVal = m_pRecordset->GetCollect("SchoolName");//m_pRecordset->PutCollect("Number",77);//设置Number列的每一个数都是77string strTemp = (char*)(_bstr_t)NameVal;cout<<strTemp.c_str()<<endl;m_pRecordset->MoveNext();}//关闭数据库连接if (m_pRecordset->GetState() == adStateOpen){m_pRecordset->Close();}m_pConnection->Close();m_pConnection.Release();::CoUninitialize();return 0;
}

如何在VS2010中连接MySQL和Access数据库相关推荐

  1. 如何在IDEA中连接mysql数据库

    补充说明下,本篇博文连接数据库,只是将IDEA作为一个Mysql数据库的可视化界面,无法在代码中访问.如果你们是想在代码中连接MySQL数据库,比如通过访问数据库的用户名和密码来进行登录验证,那么请看 ...

  2. 如何在IDEA中连接mysql数据库以及导入mysql jar包

    一.如何IDEA中链接mysql数据库 1.打开IDEA,然后点击右边的DataBase 2.点击加号,点击DateSourse,然后再选择Mysql 3.然后在以下页面中填入所需要连接数据库的主机名 ...

  3. asp 连接mysql_如何在ASP中连接MySQL数据库

    ASP和MySQL连接目前有两种办法:一个是使用组件,比较有名是MySQLX,可惜要99美元.二就是使用MyODBC 来连接,下面我们就来看看第二种方式. 试验的平台: MySQL 4.0 For R ...

  4. mysql连接clickhouse_如何在ClickHouse中使用MySQL客户端

    目录 介绍 安装 2.1成功完成安装后,启动ProxySQL. 创建ClickHouse用户 从MySQL客户端连接到ClickHouse 查询ClickHouse之类的MySQL 局限性 6.1结论 ...

  5. php mysql 到表最后_如何在PHP中获取MySQL表的最后插入ID?

    如何在PHP中获取MySQL表的最后插入ID? 我有一张表,经常插入新数据. 我需要获取表格的最后一个ID. 我怎样才能做到这一点? 它类似于SELECT MAX(id) FROM table吗? g ...

  6. 如何在docker中运行MySQL实例(转载)

    如何在docker中运行MySQL实例 转自:https://blog.csdn.net/siying8419/article/details/79670246 通常初学者学习docker时,不太清楚 ...

  7. php如何查询数据库,如何在php中查询mysql数据库数据

    如何在php中查询mysql数据库数据 发布时间:2020-07-21 09:23:55 来源:亿速云 阅读:81 作者:Leah 本篇文章给大家分享的是有关如何在php中查询mysql数据库数据,小 ...

  8. ubuntu下连接mysql出现Access denied for user ‘rose‘@‘localhost‘ (using password: NO)的解决方法

    ubuntu下连接mysql出现Access denied for user 'rose'@'localhost' (using password: NO)的解决方法 参考文章: (1)ubuntu下 ...

  9. autocad 如何摆正显示_如何在 VB 中连接 AutoCAD

    1.如何在 VB 中连接 AutoCAD. 启动 VB ,引用 AutoCAD 类型库.操作步骤:从"工程"菜单中选择"引用"选项,启动"引用&quo ...

最新文章

  1. Oracle根据日期区间查询Date类型的数据
  2. 具体解释可变參数列表
  3. 利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单
  4. 3D视觉工坊——一个有趣有料的星球
  5. xnawindowsph又见“X”Phone ePhone手机V90新鲜评测
  6. 【转】删除过期数据通用程序
  7. 在大城市打拼的你,是想留下还是想攒够了钱回家?
  8. java 调用python_Java平台如何调用Python平台?
  9. python哈姆雷特词频统计_python—文本词频统计 哈姆雷特 txt 下载
  10. 查看CentOS系统版本,Linux内核版本,32位还是64位
  11. Linux系统中 安装Vmware Toolst工具
  12. CVPR 2020放榜,录取率降至22%,港中文周博磊发文感慨十年变迁
  13. java ME是什么意思_java me是什么?
  14. 案例研究:FIT2CLOUD 飞致云携手联友科技助力东风日产云管平台建设
  15. Maya创建重力动力模型教程!
  16. 微信如何恢复删掉的好友,巧妙添加好友的方法汇总
  17. prophet模型预测时间序列
  18. 分布式调度平台xxl-job的使用及其算法分析
  19. 一文读懂Lybra Finance:LSD赛道新稳定币协议
  20. VS code 的简单入门使用方法(汇总版本)

热门文章

  1. Google文件系统 GFS
  2. 寻找动物影子:测试你的潜藏“兽性”是怎样的(图)
  3. Ubuntu 18.04 LTS 显卡驱动(418.67 )及CUDA(10.1)安装
  4. 搭建教育直播平台,这三点要做好
  5. 「开源视频管理系统」- 搭建属于自己的视频站点 @20210317
  6. 2019上海车展札记
  7. 使用 AI 编程助手CodeWhisperer,开发如有神助
  8. 数据库2-对数据增删改查
  9. 那些年和我一起睡的男人
  10. 不分类工具:sd卡格式化工具安装教程