MFC实现SQL数据库ADO连接Word文档下载推荐.docx
- 文档编号:16412570
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:157.95KB
MFC实现SQL数据库ADO连接Word文档下载推荐.docx
《MFC实现SQL数据库ADO连接Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《MFC实现SQL数据库ADO连接Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
adoEOF"
)rename("
BOF"
adoBOF"
)
//不要命名空间,重命名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)在classADOConn类体中添加如下代码
public:
//定义变量
_ConnectionPtrm_pConnection;
_RecordsetPtrm_pRecordset;
//初始化—连接数据库
voidOnInitADOConn();
//执行查询
_RecordsetPtr&
GetRecordSet(_bstr_tbstrSQL);
//执行SQL语句,InsertUpdate_variant_t
BOOLExecuteSQL(_bstr_tbstrSQL);
voidExitConnect();
至此ADOConn.h的操作完成。
(三)打开ADOConn.cpp(逐个实现其头文件ADOConn.h中定义但末实现的方法),将如下代码拷入文件末尾。
//初始化—连接数据库(实现方法)
voidADOConn:
:
OnInitADOConn(){
:
CoInitialize(NULL);
//初始化COM环境
try{
//创建connection对象(创建连接对象实例)
m_pConnection.CreateInstance("
ADODB.Connection"
);
//设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_tstrConnect="
Provider=SQLOLEDB;
Server=DESKTOP-80T6JHL;
Database=table1;
uid=sa;
pwd=1234;
"
;
m_pConnection->
Open(strConnect,"
"
adModeUnknown);
//连接数据库
}
//捕捉错误
catch(_com_errore)//捕获错误
{//显示错误信息
AfxMessageBox(e.Description());
}
//执行查询
ADOConn:
GetRecordSet(_bstr_tbstrSQL){
try
{
//连接数据库,如果connection为空,则重新连接
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->
Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
//捕捉异常
catch(_com_errore)
{
//显示错误信息
//返回记录集
returnm_pRecordset;
BOOLADOConn:
ExecuteSQL(_bstr_tbstrSQL)
{
//_variant_tRecordsAffected;
//判断是否已经连接数据库
//Connection对象的Execute方法:
(_bstr_tCommandText,
//VARIANT*RecordsAffected,longOptions)
//其中CommandText是命令字串,通常是SQL命令。
//参数RecordsAffected是操作完成后所影响的行数,
//参数Options表示CommandText的类型:
adCmdText-文本命令;
adCmdTable-表名
//adCmdProc-存储过程;
adCmdUnknown-未知
m_pConnection->
Execute(bstrSQL,NULL,adCmdText);
returntrue;
returnfalse;
ExitConnect()
//关闭记录集和连接
if(m_pRecordset!
=NULL)
Close();
//释放环境
CoUninitialize();
这段代码涉及到获取数据库连接中会出现的异常,并进行处理,不用过于深究其作用,等数据库连接成功后再慢慢研究。
此段代码中有些地方要根据自己数据库的配置情况,进行适当的改动。
需要改动的代码为:
_bstr_tstrConnect=……pwd=123456;
根据自己的实际数据库情况进行修改
如:
_bstr_tstrConnect="
Server=DESKTOP-80T6JHL;
Provider不用改,Server是服务器的名称,怎么查看呢?
打开sqlmanagementstudio连接进行后在左边的“对象资源管理器”中会看到服务器的名称。
我的叫DESKTOP-80T6JHL;
Database是要连接到的数据库名称。
比如我在managementstudio中新建了一个数据库table1;
uid=登陆服务器的用户名;
pwd=这个用户名的密码,我的密码是123456;
到这里就完成了此段代码的修改了。
(四)保存以上文件。
即完成了sqlado连接类ADOConn的编辑。
比如我要在telbookDlg.cpp中需要连接到数据库,只需要引用如下代码:
ADOConnac;
//实例化对象
ac.OnInitADOConn():
//连接
_bstrtvs;
//定义一个变量用于存放你自己编写的sql命令
vs="
deletefrompeoplewhereid=l"
//向vs中写入要执行的sql命令
ac.ExecuteSQL(vs):
//调用ac的ExecuteSQL()函数执行sql命令
ac.ExitConnect();
//操作完成后,断开与数据库连接
到此,实现adosql数据库的功能。
知识点补充:
要插入数据可以调用下面的语句:
ADOConnconn;
conn.OnInitADOConn();
_bstr_tvSQL;
vSQL="
INSERTINTO[Student].[dbo].[用户]([用户名],[密码])VALUES('
seamanj'
'
123'
)"
conn.ExecuteSQL(vSQL);
其他说明:
判断数据库连接是否成功的函数:
BOOL
CADOConn:
OnInitADOConn()
m_pConnection.CreateInstance(TEXT("
));
//创建连接对象实例
_bstr_t
strConnect="
连接语句"
Open(strConnect,"
adModeUnKnown);
catch(_com_errore)
//捕获错误
AfxMessageBox(TEXT("
连接数据库失败"
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
returnfalse;
//连接失败则返回false
returntrue;
//连接成功则返回true
详解MFC使用ADO连接SQLServer数据库
VC用ADO访问数据库全攻略,介绍了VC用ADO来访问数据库的各个对象及各方法,很经典,也很实用,很值得一看。
一、ADO概述
ADO是Microsoft为最新和最强大的数据访问范例OLEDB而设计的,是一个便于使用的应用程序层接口。
ADO最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。
二、在VC中使用ADO接口技术
1、引入ADO库文件
使用ADO前必须在工程的stdafx.h头文件里的顶头引入ADO库文件,以使编译器能正确编译。
用#import引入ADO库文件
c:
\programfiles\commonfiles\system\ado\msado15.dll"
no_namespacesrename("
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时不需要。
_CommandPtr接口返回一个记录集。
它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。
如果你只执行一次或几次数据访问操作,后者是比较好的选择。
但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。
_RecordsetPtr是一个记录集对象。
与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。
同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。
如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。
4、使用_ConnectionPtr接口
_ConnectionPtr主要是一个连接接口,取得与数据库的连接。
它的连接字符串可以是自己直接写,也可以指向一个ODBCDSN。
剩下部分资料,见:
好吧,直接来个例子吧:
C++直接连接ADO的简单例子
#include<
icrsint.h>
iostream>
iomanip>
//forsetw()
string>
usingnamespacestd;
voidmain()
CoInitialize(NULL);
//初始化COM环境
_ConnectionPtrsqlSp;
//初始化指针,建立与服务器的连接
HRESULThr=sqlSp.CreateInstance(_uuidof(Connection));
if(FAILED(hr))//发生连接错误
cout<
<
"
_ConnectionPtr对象指针实例化失败!
!
<
endl;
return;
else{
//初始化连接参数
Driver={sqlserver};
server=127.0.0.1,1433;
uid=sa;
pwd=1234;
database=table1;
//_bstr_tstrConnect="
Server=127.0.0.1,1433;
Database=PBMS;
pwd=pp471006459;
//_bstr_tstrConnect="
Provider=SQLOLEDB.1;
Password=pp471006459;
PersistSecurityInfo=True;
UserID=sa;
//"
InitialCatalog=PBMS;
DataSource=127.0.0.1,1433"
//以上这三条strConnect语句都可以用!
看自己喜好选择用吧
//要注意修改用户名uid、密码pwd、数据库名database,这三个参数均是你自己sqlserver的数据库信息
try{//执行连接
sqlSp->
}
catch(_com_error&
e){//连接失败,捕获相应的信息
cout<
e.Description()<
_RecordsetPtrm_pRecordset;
//记录集对象指针,用来执行SQL语句并记录查询结果
if(FAILED(m_pRecordset.CreateInstance(_uuidof(Recordset))))
{
记录集对象指针实例化失败!
return;
//charstrSQL[]="
SELECT*FROMmytable"
try{
m_pRecordset->
Open("
(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic,adCmdText);
//打开数据库,执行SQL语句
e)//打开数据库失败
try{//读取记录
m_pRecordset->
MoveFirst();
while(!
m_pRecordset->
adoEOF)
{
stringname=(char*)(_bstr_t)(m_pRecordset->
Fields->
GetItem(_variant_t("
name"
))->
Value);
//输出相应的数据信息
cout<
name<
m_pRecordset->
MoveNext();
}
e)
system("
pause"
//使用时注意代码中我的说明!
因为要修改一些内容!
因为每个人登录数据库的登录信息,链接的数据库名均不一样,所以要修改!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 实现 SQL 数据库 ADO 连接
![提示](https://static.bdocx.com/images/bang_tan.gif)