MFC运用ADO操作数据库

上传人:夏** 文档编号:488207251 上传时间:2023-04-18 格式:DOCX 页数:11 大小:27.05KB
返回 下载 相关 举报
MFC运用ADO操作数据库_第1页
第1页 / 共11页
MFC运用ADO操作数据库_第2页
第2页 / 共11页
MFC运用ADO操作数据库_第3页
第3页 / 共11页
MFC运用ADO操作数据库_第4页
第4页 / 共11页
MFC运用ADO操作数据库_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《MFC运用ADO操作数据库》由会员分享,可在线阅读,更多相关《MFC运用ADO操作数据库(11页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! MFC运用ADO操作数据库一,数据库访问技术目前数据库接口问技术主要有DAO,RDO,ODBC,OLE DB和ADOODBC,开发数据库互连。为数据库开发提供统一的接口,可以与任何具有ODBC驱动程序的数据库通信。和其他数据库访问技术相比,属于比较底层的数据库接口。只能和关心数据库进行通信,不能访问非关系数据库。DAO,数据访问对象。基于COM的面向对象数据库编程模型。是一组基于Mircrosoft Access Jet引擎的COM自动化接口。直接与Access/Jet数据库通信,通过Jet引擎也可以与其他数据库通信。效率不高。最初是作为ODBC

2、 API的抽象,为Visual Basic程序员提供的编程对象。使用ODBC API对数据源进行操作。不需要经过Jet引擎,比DAO效率高。OLE DB,对象链接嵌入数据库。未来数据库访问的发展模式。提供COM接口,与其他数据库访问技术相比,具有更好的健壮性和灵活性,更高的容错能力。属于底层访问技术。可以与关系和非关系型数据库进行通信。ADO,ActiveX Data Object。对OLE DB的高层次封装。简化了OLE DB,属于高层的数据库接口。另外同OLE DB相比,能够使用ADO的编程语言更多。ADO提供一个自动化接口,使VBScript和JavaScript等脚本语言可以使用ADO

3、。二,ADO访问基础1引入ADO类型库 在Stdafx.h中使用如下指令引入类型库: #import c:program filescommon filessystemadomsado15.dll no_namespace rename(EOF,adoEOF) 根据操作系统的不同,msado*.dll的版本不同,目前最高版本是2.1吧。rename(EOF,adoEOF)是为了防止和别的结束标示重名。 在编译过程中不用理会下面的编译警告: warning: unary minus operator applied to unsigned type, result still unsigned

4、如果不想此警告出现,可以在 StdAfx.h 文件中加入这样一行代码以禁止此警告: #pragma warning(disable:4146) 对于指定ADO版本/如果使用 ADO 2.0 加入下面代码#import C:Program FilesCommon FilesSystemOle DBmsdasc.dll no_namespace /如果使用 ADO 2.1 加入下面代码#import C:Program FilesCommon FilesSystemOle DBoledb32.dll no_namespace注:ADO2.0 或 ADO2.1 中,如果其中一个编译不成功,则用另一个

5、2初始化COM库 一般中应用程序类初始化函数中初始化COM库,当然也可以在别的地方。只要是在使用之前初始化就可以。AfxOleInit(); / 初始化COM环境上面是MFC环境下注册COM的方法,如果非MFC环境使用方法如下: CoInitialize(NULL); CoUnInitialize();3创建Connection对象并连接数据库 针对链接数据库的方法主要有两种,静态链接和动态链接。静态链接:_ConnectionPtr m_pConnection; 在初始化函数中初始化它。 try hr = m_pConnection.CreateInstance(ADODB.Connecti

6、on);/创建Connection对象 if(SUCCEEDED(hr) hr = m_pConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb,adModeUnknown);/连接数据库 /上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为 :Provider=Microsoft.Jet.OLEDB.3.51; catch(_com_error e)/捕捉异常 CString errormessage; errormessage.Format(连接数据库失败

7、!rn错误信息:%s,e.ErrorMessage(); AfxMessageBox(errormessage);/显示错误信息 /假设数据库名称test.mdb;数据源为test,下面使用不同的方法连接数据库 使用ADO连接ACCESS2000数据库 m_pConnection-Open(Provider=Mircrosoft.Jet.OLEDB.4.0;Data Source=test.mdb,adModeUnknown); 使用ADO连接ACCESS97数据库 m_pConnection-Open(Provider=Mircrosoft.Jet.OLEDB.3.51;Data Sourc

8、e=test.mdb,adModeUnKnown); 使用DSN数据源对任何支持ODBC的数据库进行连接 m_pConnection-Open(Data Source=test;UID=sa;PWD=,adModeUnknown); 不通过数据源对SQL SERVER数据库进行连接 m_pConnection-Open(driver=SQL SERVER;Server=127.0.0.1;DATABASE=TEST;UID=sa;PWD=,adModeUnknown); 设置数据库连接超时,需要在Open之前调用 m_pConnection-ConnectionTimeOut = 30;/秒动

9、态链接:HRESULT hr;IDataSourceLocatorPtr dlPrompt=NULL;_RecordsetPtr rs=NULL;try / 初始化DataLinks对象 hr=dlPrompt.CreateInstance(_uuidof(DataLinks); if(FAILED(hr) throw(_com_error(hr,NULL); / 建立连接 pConn=dlPrompt-PromptNew(); / 如果 conn 为 NULL if(pConn=NULL) return; / 打开连接 pConn-Open(pConn-ConnectionString,L,

10、L,-1); / 清除列表框 while(m_tblList.GetCount()0) m_tblList.DeleteString(0); / 获取数据库中表集 rs=pConn-OpenSchema(adSchemaTables); while(!rs-adoEOF) m_tblList.AddString(char*)(_bstr_t)rs-Fields-ItemLTABLE_NAME-Value); rs-MoveNext(); rs=NULL; dlPrompt.Release();catch (_com_error &e) AfxMessageBox(e.ErrorMessage(

11、);需要注意的是,在建立工程时,要选上Automation选项。(具体情况看)三,ADO的数据操作1Recordset对象操作数据 Recordset对象是操作数据最简单的方法,也比较直接,特别可以直接用SQL语句来进行操作。我本人也最常用Recordset对象。 _RecordsetPtr m_pRecordset;m_pRecordset.CreateInstance(ADODB.Recordset);或者直接写成:_RecordsetPtr pRecordset (ADODB.Recordset);也可以这样写:_RecordsetPtr pRecordset;pRecordset.Cr

12、eateInstance(_uuidof(_Recordset);注意,如果变量是一个类的实例则用.操作符,若是一个指向实例的指针则应使用-操作符。一个变量能通过两种方式被使用。因为-操作符被重载,允许一个对象实例类似一个接口指针那样被使用;-操作符返回该指针;而由这个返回的指针访问_Recordset对象的成员。 如下代码,获得表中所有记录到Recordset对象 CString strSQL = select * from student; m_pRecordset-Open(strSQL,_variant_t(IDispatch *)m_pConnection,true),adOpenS

13、tatic,adLockOptimistic,adCmdText); 第一个参数是要执行的SQL字符串,第二个是活动连接 第三个参数是光标类型。可以取如下值 adOpenUnspecified = -1,/不作特别指定 adOpenForwardOnly = 0,/前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这种方式可以提高浏览速度。但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用 adOpenKeyset = 1,/采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你

14、是可见的。 adOpenDynamic = 2,/动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。 adOpenStatic = 3/静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操作对你记录集来说是不可见的。 第四个参数,锁定类型。 adLockUnspecified = -1,/未指定 adLockReadOnly = 1,/只读记录集 adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制 adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数据的更新、插入、删除等动作 adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式下完成。 第五个参数。取如下值之一: adCmdText:表明CommandText是文本命令

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号