MFC实现SQL数据库ADO连接
更新时间:2024-05-22 20:55:01 阅读量: 综合文库 文档下载
- ado连接sql数据库推荐度:
- 相关推荐
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
VC MFC实现SQL数据库ADO连接(完整版)
关于vc6.0中实现ADO SQL数据库连接的文章网上虽然很多,但大多写的很繁琐,对于我们这样的菜鸟来说,还是很希望有一篇简单化的文章的。希望跟我一样的菜鸟们学得开心!
源代码文件链接:
http://pan.http://www.wodefanwen.com//s/1eR9icyY
概述:
要在一个vc工程中实现数据库的连接,最好的方式是在新建一个用于连接数据库的类比如ADOConn,需要连接数据库的时候将这个类实例化就可以了。
操作:新建一个ADOConn的对象,比如ADOConn ac;。然后再引用些对象就可以实现相应的操作了。
实践过程:
(一) 目的:封装一个自己的类。
在vc6.0中新建一个基于对话框的mfc工程,然后点击菜单栏->插入->类(mfc类)。 然后在“类的类型”中选择Generic Class,名称为ADOConn。
此后会在vc左边视窗的“Source Files”中多出一个ADOConn.cpp的文件,在\Files\中多出一个“ADOCon.h”的文件。
如果是用VS2013来创建工程的情况:
VS2013中添加类:
·1·
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
右击myMFC(新建的项目)——添加——类—— MFC类。
(二)打开ADOConn.h(即编辑ADOConn类的头文件)
(1)在第一行加入(用于vc支持ado连接) #import
\
Files\\Common
Files\\System\\ado\\msado15.dll\
no_namespace
rename(\
//不要命名空间,重命名EOF为adoEOF,rename的意思就是改名了,rename(\将EOF改名为adoEOF,以免和C语言里的EOF重名。
这句话意味使用msado15.dll动态连接库文件,里面就有ADO.
如果存在问题:用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh”的问题。 解决办法很简单:
在生成菜单--- 重新生成 --- 即可。 原因是:
当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵LoadTypeLib()。
#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。在没有经过编译器编译之前,文件还没有生成,所以,会出现错误提示。
(2)在class ADOConn类体中添加如下代码 public: // 定义变量
_ConnectionPtrm_pConnection; _RecordsetPtrm_pRecordset;
// 初始化—连接数据库 void OnInitADOConn();
// 执行查询
_RecordsetPtr&GetRecordSet(_bstr_tbstrSQL);
// 执行SQL语句,Insert Update _variant_t BOOL ExecuteSQL(_bstr_tbstrSQL); void ExitConnect();
·2·
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
至此ADOConn.h的操作完成。
(三)打开ADOConn.cpp(逐个实现其头文件ADOConn.h中定义但末实现的方法),将如下代码拷入文件末尾。
// 初始化—连接数据库(实现方法) void ADOConn::OnInitADOConn() { }
//执行查询
_RecordsetPtr&ADOConn::GetRecordSet(_bstr_tbstrSQL){
::CoInitialize(NULL); //初始化COM环境 try {
//创建connection对象( 创建连接对象实例) m_pConnection.CreateInstance(\
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
m_pConnection->Open(strConnect, \ //连接数据库 }
//捕捉错误
catch (_com_error e) //捕获错误 { //显示错误信息 }
AfxMessageBox(e.Description());
_bstr_tstrConnect=\
try { }
//捕捉异常 catch (_com_error e)
·3·
//连接数据库,如果connection为空,则重新连接 if (m_pConnection == NULL)
OnInitADOConn(); //创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset)); //取得表中的记录
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText);
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
}
{ }
//返回记录集 return m_pRecordset;
//显示错误信息
AfxMessageBox(e.Description());
// 执行SQL语句,Insert Update _variant_t BOOL ADOConn::ExecuteSQL(_bstr_tbstrSQL) { }
void ADOConn::ExitConnect() {
// 关闭记录集和连接 if (m_pRecordset != NULL)
m_pRecordset->Close(); m_pConnection->Close();
·4·
// _variant_tRecordsAffected; try { }
catch (_com_error e) { }
AfxMessageBox(e.Description()); return false;
// 判断是否已经连接数据库 if (m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_tCommandText, // VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。 // 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名 // adCmdProc-存储过程;adCmdUnknown-未知 m_pConnection->Execute(bstrSQL, NULL, adCmdText); return true;
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
}
// 释放环境 ::CoUninitialize();
这段代码涉及到获取数据库连接中会出现的异常,并进行处理,不用过于深究其作用,等数据库连接成功后再慢慢研究。
此段代码中有些地方要根据自己数据库的配置情况,进行适当的改动。需要改动的代码为: _bstr_tstrConnect = ??pwd=123456;\ 根据自己的实际数据库情况进行修改 如:
_bstr_tstrConnect pwd=1234;\
Provider不用改,Server是服务器的名称,怎么查看呢?
打开sqlmanagementstudio连接进行后在左边的“对象资源管理器”中会看到服务器的名称。 我的叫DESKTOP-80T6JHL;Database是要连接到的数据库名称。比如我在management studio中新建了一个数据库table1;uid=登陆服务器的用户名;pwd=这个用户名的密码,我的密码是123456;到这里就完成了此段代码的修改了。
(四)保存以上文件。即完成了sql ado连接类ADOConn的编辑。
比如我要在telbookDlg.cpp中需要连接到数据库, 只需要引用如下代码: ADOConn ac;//实例化对象
ac.OnInitADOConn()://连接
_bstr t vs;//定义一个变量用于存放你自己编写的sql命令
vs=\向vs中写入要执行的sql命令 ac. ExecuteSQL (vs)://调用ac的ExecuteSQL()函数执行sql命令 ac. ExitConnect ();//操作完成后,断开与数据库连接
到此,实现ado sql数据库的功能。
·5·
= \Server= DESKTOP-80T6JHL;Database=table1; uid=sa;
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
知识点补充:
要插入数据可以调用下面的语句:
ADOConn conn; conn.OnInitADOConn(); _bstr_tvSQL;
vSQL = \用户] ([用户名],[密码]) VALUES('seamanj','123')\ conn.ExecuteSQL(vSQL);
其他说明:判断数据库连接是否成功的函数: BOOL CADOConn::OnInitADOConn() {
::CoInitialize(NULL); //初始化COM环境 try {
m_pConnection.CreateInstance(TEXT(\//创建连接对象实例 _bstr_t strConnect=\连接语句\
m_pConnection->Open(strConnect,\//连接数据库 }
catch(_com_error e) //捕获错误 {
AfxMessageBox(TEXT(\连接数据库失败\
·6·
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
AfxMessageBox(e.Description()); AfxMessageBox(e.ErrorMessage()); return false; //连接失败则返回false }
return true; //连接成功则返回true }
详解MFC使用ADO连接SQLServer数据库
VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。
一、ADO概述
ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。
二、在VC中使用ADO接口技术 1、 引入ADO库文件
使用ADO前必须在工程的stdafx.h头文件里的顶头引入ADO库文件,以使编译器能正确编译。
用#import引入ADO库文件 #import adoEOF\
这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免常数冲突,将常数EOF改名为adoEOF。现在不需添加另外的头文件,就可以使用ADO接口了。
2、初始化OLE/COM库环境
必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的:OnInitADOConn成员函数里初始化OLE/COM库环境。(详细代码见上边的例子)
3、ADO接口简介
ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一个记录集或一个空指针。
通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordsetPtr来实现。而用 _ConnectionPtr操作时要想得到记录条数得遍历所有记录,而用_RecordsetPtr时不需要。
·7·
\files\\common files\\system\\ado\\msado15.dll\rename(\
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用 _CommandPtr接口执行存储过程和SQL语句。
_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同 _CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的 connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局 _ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。
4、使用_ConnectionPtr接口
_ConnectionPtr主要是一个连接接口,取得与数据库的连接。它的连接字符串可以是自己直接写,也可以指向一个ODBC DSN。
剩下部分资料,见:http://blog.csdn.net/yangbingzhou/article/details/23963931
好吧,直接来个例子吧:
C++直接连接ADO的简单例子
#include
#include
#import \ no_namespace rename(\
void main() {
CoInitialize(NULL); //初始化COM环境
_ConnectionPtrsqlSp; //初始化指针,建立与服务器的连接 HRESULT hr = sqlSp.CreateInstance(_uuidof(Connection)); if (FAILED(hr)) //发生连接错误 { }
else {
cout<< \对象指针实例化失败!!!\return;
//初始化连接参数
·8·
广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053)
_bstr_tstrConnect = \
//_bstr_t strConnect=\//_bstr_tstrConnect=\//\
//以上这三条strConnect语句都可以用!!看自己喜好选择用吧
//要注意修改用户名uid、密码pwd、数据库名database,这三个参数均是你自己sql server的数据库信息
try { //执行连接
}
catch (_com_error&e) { //连接失败,捕获相应的信息 }
_RecordsetPtrm_pRecordset; //记录集对象指针,用来执行SQL语句并记录查询结果 if (FAILED(m_pRecordset.CreateInstance(_uuidof(Recordset)))) { }
//char strSQL[]=\ mytable\try {
cout<< \记录集对象指针实例化失败!\return;
cout< sqlSp->Open(strConnect, \ m_pRecordset->Open(\ mytable\ } catch (_com_error&e) //打开数据库失败 { } try { //读取记录 m_pRecordset->MoveFirst(); while (!m_pRecordset->adoEOF) { string name = (char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t(\ //输出相应cout< 的数据信息 } catch (_com_error&e) ·9· } cout<< name < 广工大学城15物联网4 Wisdom整理(原文档来源:http://blog.csdn.net/wxlcx/article/details/4872053) } } system(\ { } cout< //使用时注意代码中我的说明!!因为要修改一些内容!因为每个人登录数据库的登录信息,链接的数据库名均不一样,所以要修改!! ·10·
正在阅读:
MFC实现SQL数据库ADO连接05-22
读书节手抄报资料大全_节日习俗04-04
教学法09-21
主持串词12-08
LNI-180A分级式冲击磨操作规程——成都牧甫(广汉黄铭)05-05
辽河油田实习小结报告06-12
三层交换机IP Source Guard典型配置举例04-07
新课标高中语文(人教版)必修1 《中外短诗五首》教案05-06
计网第五次作业 - 图文11-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 连接
- 实现
- 数据库
- MFC
- SQL
- ADO
- 2高考文言文阅读题汇编
- 河南省新版继电保护复习题1
- 2010年9月18日公务员考试行测真题
- 环境法第1-2章模拟练习题
- 2018年中国石油化工行业行业发展趋势报告目录
- 竹鼠养殖产业化扶贫项目申报建议书 - 图文
- 可研报告
- 人教版九年级思想品德第三次月考试卷
- 甲级单位编制门铃IC项目可行性报告(立项可研+贷款+用地+2013案
- 交通信号灯中黄灯闪亮时间分析建模论文
- 人才培养质量评价体系
- 爱岗敬业演讲稿《我们的责任、使命、奉献精神》(精选多篇)
- 基因表达调控
- 人教版四年级数学上册三位数乘两位数练习题精选(171)
- 中北大学农村生源就业走向调查 - 图文
- 新视野大学英语介词填空(附答案)
- 义务教育阶段控辍保学工作实施方案(望溪二小)
- 积累运用:2014年全国各地中考语文试题分类整理
- 湖北剩州市沙市区2016 - 2017学年高一数学下学期第二次双周考试
- 年产10000吨复合果蔬汁饮料厂设计——《食品工厂与环境保护》毕