在VC中使用ADO开发数据库应用程序PPT课件

上传人:每**** 文档编号:71358246 上传时间:2022-04-07 格式:PPT 页数:22 大小:43KB
收藏 版权申诉 举报 下载
在VC中使用ADO开发数据库应用程序PPT课件_第1页
第1页 / 共22页
在VC中使用ADO开发数据库应用程序PPT课件_第2页
第2页 / 共22页
在VC中使用ADO开发数据库应用程序PPT课件_第3页
第3页 / 共22页
资源描述:

《在VC中使用ADO开发数据库应用程序PPT课件》由会员分享,可在线阅读,更多相关《在VC中使用ADO开发数据库应用程序PPT课件(22页珍藏版)》请在装配图网上搜索。

1、2021/7/2312021/7/232ADO是Microsoft为最新和最强大的数据访问范例OLE DB 而设计的,是一个便于使用的应用程序接口。ADO 使您能够编写应用程序以通过 OLE.DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。2021/7/233OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是

2、Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。2021/7/234但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳

3、的功能,它并不符合简单化的要求。您需要的API 应该是一座连接应用程序和 OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。2021/7/235使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:代码代码1:用:用#import引入引入ADO库文件库文件#import c:program filescommon filessystemadomsado15.dll no_namespaces rename(EOF adoEOF)这行语句声明在工程中使用这行语句声明在工程中使用ADO,但不

4、使用,但不使用ADO的名字的名字空间,并且为了避免常数冲突,将常数空间,并且为了避免常数冲突,将常数EOF改名为改名为adoEOF。现在不需添加另外的头文件,就可以使用。现在不需添加另外的头文件,就可以使用ADO接口了。接口了。1、引入、引入ADO库文件库文件2021/7/236必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。代码代码2:初始化:初始化OLE/COM库环境库环境BOOL CADOApp:InitInstanc

5、e()if(!AfxOleInit()AfxMessageBox(“OLE初始化出错初始化出错!”);return FALSE; 2021/7/237函数AfxOleInit在每次应用程序启动时初始化OLE/COM库环境。同DAO和CDatabase一样,ADO由几个接口组成:_ConnectionPtr,_CommandPtr和和_RecordsetPtr.不同于不同于DAO和和Cdatabase的是,的是,ADO基于基于COM的接的接口,因此,假如你没有接触过口,因此,假如你没有接触过COM,你应该在使用,你应该在使用ADO前前先找有关书籍了解一下先找有关书籍了解一下COM。3、ADO接口

6、简介接口简介ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。2021/7/238_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法。通常同CDatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你

7、可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr接口执行存储过程和SQL语句。2021/7/239_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给_RecordsetPtr

8、的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。4、使用、使用_ConnectionPtr接口接口_ConnectionPtr是一个连接接口,它类似于CDatabase和CDaoDatabase。它们的工作原理相似。首先创建一个_ConnectionPtr接口实例,接着指向并打开一个ODBC数据源或OLE DB数据提供者(Provider)。以下代码和CDaoDatabase分别创建一个基于DSN和非DSN的

9、数据连接。2021/7/2310代码代码3:使用使用CDaoDatabase(基于(基于DSN)CDaoDatabase MyDb = new CDaoDatabase();MyDb.Open(NULL,FALSE,FALSE,ODBC;DSN=samp;UID=admin;PWD=admin);代码代码4:使用使用CDaoDatabase(基于非(基于非DSN)CDaoDatabase MyDb = new CDaoDatabase();MyDb.Open(NULL,FALSE,FALSE,ODBC;DRIVER=SQL Server;SERVER=server;DATABASE=samp;

10、UID=admin;PWD=admin);代码代码5:使用使用_ConnectionPtr(基于基于DSN)_ConnectionPtr MyDb;MyDb.CreateInstance(_uuidof(Connection);MyDb-Open(DSN=samp;UID=admin;PWD=admin,-1);2021/7/2311代码代码6:使用使用_ConnectionPtr (基于非基于非DSN)_ConnectionPtr MyDb;MyDb.CreateInstance(_uuidof(Connection);MyDb-Open(Provider=SQLOLEDB;SERVER=s

11、erver;DATABASE=samp;UID=admin;PWD=admin,-1);5、使用、使用_RecordsetPtr接口接口_RecordsetPtr接口的使用方法和CDaoDatabase类似,通过以下代码的比较,你会发现使用_RecordsetPtr接口非常简单(以下代码使用上面已经创建的数据连接):2021/7/2312代码代码7:使用使用CDaoDatabase执行执行SQL语句语句CDaoRecordset MySet = new CDaoRecordset(MyDb);MySet-Open(AFX_DAO_USE_DEFAULT_TYPE,SELECT * FROM t

12、_samp);代码代码8:使用使用_RecordsetPtr执行执行SQL语句语句_RecordsetPtr MySet;MySet.CreateInstance(_uuidof(Recordset);MySet-Open(SELECT * FROM some_table,MyDb.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);2021/7/2313现在我们已经有了一个数据连接和一个记录集,接下来就可以使用数据了。从以下代码可以看到,使用ADO的_RecordsetPtr接口,就不需要象DAO那样频繁地使用大而复杂的数据

13、结构VARIANT,并强制转换各种数据类型了,这也是ADO的优点之一。假定程序有一个名称为m_List的的ListBox控件,下面代码我们用_RecordsetPtr接口获取记录集数据并填充这个ListBox控件:代码代码9:使用使用DAO访问数据访问数据VARIANT * vFieldValue;COleVariant covFieldValue;CString Holder;while(!MySet-IsEOF()MySet-GetFieldValue(FIELD_1, covFieldValue);vFieldValue = (LPVARIANT)covFieldValue;if(vFi

14、eldValue-vt!-VT_NULL)2021/7/2314Holder.Format(%s,vFieldValue-pbVal);m_List.AddString(Holder);MySet.MoveNext();代码代码10:使用使用ADO访问数据访问数据_variant_t Holdertrywhile(!MySet-adoEOF)Holder = MySet-GetCollect(FIELD_1);if(Holder.vt!=VT_NULL)m_List.AddString(char*)_bstr_t(Holder);MySet-MoveNext();2021/7/2315catc

15、h(_com_error * e)CString Error = e-ErrorMessage();AfxMessageBox(e-ErrorMessage();catch(.)MessageBox(ADO发生错误发生错误!);必须始终在代码中用必须始终在代码中用try和和catch来捕获来捕获ADO错误错误,否否则则ADO错误会使你的应用程序崩溃。当错误会使你的应用程序崩溃。当ADO发生运发生运行时错误时行时错误时(如数据库不存在如数据库不存在),OLE DB数据提供者数据提供者将自动创建一个将自动创建一个_com_error对象对象,并将有关错误信息并将有关错误信息填充到这个对象的成员变量

16、填充到这个对象的成员变量.2021/7/23166、使用、使用_CommandPtr接口接口_CommandPtr接口返回一个Recordset对象,并且提供了更多的记录集控制功能,以下代码示例了使用_CommandPtr接口的方法:代码代码11:使用使用_CommandPtr接口获取数据接口获取数据_CommandPtr pCommand;_RecordsetPtr MySet;pCommand.CreateInstance(_uuidof(Command);pCommand-ActiveConnection=MyDb;pCommand-CommandText=select * from s

17、ome_table;pCommand-CommandType=adCmdText; 2021/7/2317pCommand-Parameters-Refresh();MySet=pCommand-Execute(NULL,NULL,adCmdUnknown);_variant_t TheValue = MySet-GetCollect(FIELD_1);CString sValue=(char*)_bstr_t(TheValue);参数对象:(Parameter)提供了对命令对象中参数的灵活设置。2021/7/23187、关于数据类型转换、关于数据类型转换由于由于COM对象是跨平台的,它使用了

18、一种通用的对象是跨平台的,它使用了一种通用的方法来处理各种类型的数据,因此方法来处理各种类型的数据,因此CString 类和类和COM对象是不兼容的,我们需要一组对象是不兼容的,我们需要一组API来转换来转换COM对象和对象和C+类型的数据。类型的数据。_vatiant_t和和_bstr_t就是这样两种对象。它们提供了通用的方法转换就是这样两种对象。它们提供了通用的方法转换COM对象和对象和C+类型的数据。类型的数据。2021/7/23198 ADO的静态绑定在ADO中除了对数据的动态查询外,还可以通过静态的绑定来进行记录的访问。在ADO中提供了如下的静态绑定宏。ADO_FIXED_LENGT

19、H_ENTRY(Ordinal, DataType, Buffer, Status, Modify)ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)2021/7/2320例:例:class CP3dmTitleDefBinding :public CADORecordBindingpublic:CP3dmTitleDefBin

20、ding();BEGIN_ADO_BINDING(CP3dmTitleDefBinding)ADO_FIXED_LENGTH_ENTRY(1,adInteger,m_lTitleID,lTitleID,FALSE)ADO_VARIABLE_LENGTH_ENTRY2(2,adVarChar,m_strTitleName,sizeof(m_strTitleName),lTitleName,TRUE)END_ADO_BINDING()public:char m_strTitleName256;ULONG lTitleName;long m_lTitleID;ULONG lTitleID;2021/

21、7/2321IADORecordBinding *m_pIADORecordBinding;pSet-QueryInterface(_uuidof(IADORecordBinding),(LPVOID*)&m_pIADORecordBinding);m_pIADORecordBinding-BindToRecordset(&m_DocBinding);使用静态绑定访问记录:if(m_pIADORecordBinding)m_pIADORecordBinding-Release();2021/7/23229、小结、小结数据访问发展的趋势是数据访问发展的趋势是OLE DB.使用使用OLE DB最简最简单的方法是单的方法是ADO.ADO的对象层次模型封装了数据的对象层次模型封装了数据库访问细节库访问细节,为为C+程序员提供了一种非常好的数据程序员提供了一种非常好的数据访问策略。访问策略。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!