MFC运用ADO操作数据库.doc_第1页
MFC运用ADO操作数据库.doc_第2页
MFC运用ADO操作数据库.doc_第3页
MFC运用ADO操作数据库.doc_第4页
MFC运用ADO操作数据库.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MFC用ADO操作数据库班级:自动化一班学号:0805010121姓名:宋瑞瑞指导老师:尹斌MFC使用ADO操作数据库一、ADO概述ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口。ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据库服务器中的数据。ADO 最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。ADO 在关键的应用方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所有这些都是为了提供轻量、高性能的接口。之所以称为 ADO,是用了一个比较熟悉的暗喻,OLE 自动化接口。OLE DB是一组”组件对象模型”(COM) 接口,是新的数据库低层接口,它封装了ODBC的功能,并以统一的方式访问存储在不同信息源中的数据。OLE DB是Microsoft UDA(Universal Data Access)策略的技术基础。OLE DB 为任何数据源提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等等。也就是说,OLE DB 并不局限于 ISAM、Jet 甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在 Excel 电子数据表、文本文件、电子邮件/目录服务甚至邮件服务器,诸如 Microsoft Exchange 中的数据。但是,OLE DB 应用程序编程接口的目的是为各种应用程序提供最佳的功能,它并不符合简单化的要求。所需要的API 应该是一座连接应用程序和OLE DB 的桥梁,这就是 ActiveX Data Objects (ADO)。二、利用ADO操作总体思路(1)引入ADO库文件(2)初始化OLE/COM库(3)用Connection对象连接数据库(4)利用建立好的连接,利用Recordset对象取得结果记录集进行查询、处理。(5)使用完毕后关闭连接释放对象。三、在VC+中使用ADO的步骤:1、引入ADO库文件 使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示: #import c:program filescommon filessystemadomsado15.dll no_namespaces rename(EOF adoEOF)其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。语句no_namespace说明ADO对象不使用命名空间,rename (EOF, adoEOF)说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。现在不需添加另外的头文件,就可以使用ADO接口了。 2、初始化OLE/COM库环境必须注意的是,ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,一个比较好的方法是在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。BOOL CADODataBase1App:InitInstance()AfxEnableControlContainer();/初始化OLE DLLsif (!AfxOleInit() /这就是初始化COM库AfxMessageBox(初始化OLE DLL失败!);return FALSE;3.使用_ConnectionPtr接口_ConnectionPtr主要是一个连接接口,取得与数据库的连接。它的连接字符串可以是自己直接写,也可以指向一个ODBCDSN,首先我们需要添加一个指向Connection对象的指针_ConnectionPtr m_pConnection。_ConnectionPtr m_pConnection;/在头文件stdAfx.h建立连接对象指针 在ADO操作中建议语句中要常用try.catch()来捕获错误信息,因为它有时会经常出现一些意想不到的错误。BOOL CADODataBase3Dlg:OnInitDialog() CDialog:OnInitDialog();(前面省略)HRESULT hr;try hr = m_pConnection.CreateInstance(ADODB.Connection);/创建Connection对象 if(SUCCEEDED(hr) hr = m_pConnection-Open(student,adModeUnknown);/连接数据库 catch(_com_error e) /捕捉异常 CString errormessage; errormessage.Format(连数据库失败!rn错误信息:%s,e.ErrorMessage(); AfxMessageBox(errormessage); /显示错误信息 4.使用_RecordsetPtr接口 _RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作。首先,在头文件stdAfx.h中建立记录集对象m_pRecordset。_RecordsetPtr m_pRecordset; /在头文件stdAfx.h中建立记录集对象利用m_pRecordset对象取得结果记录集进行查询、处理前,同样使用try.catch()来捕获错误信息。try m_pRecordset-Open(_bstr_t(strSQL), m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); /从数据库中打开表catch (_com_error e)CString strError;strError.Format(警告:打开数据表异常。错误信息:%s,e.ErrorMessage();AfxMessageBox(strError);return;记录集的遍历、处理:获取记录集的记录数_variant_t RecordsAffected; m_pRecordset=m_pConnection-Execute(SELECT COUNT(*) FROM studentinfo,&RecordsAffected,adCmdText); _variant_t vIndex = (long)0; _variant_t vCount = m_pRecordset-GetCollect(vIndex); /取得第一个字段的值放入vCount变量count=vCount.lVal; 移到第一条记录m_pRecordset-MoveFirst();curNo=1;m_Status.Format(共有%d条记录,当前第%d条,count,curNo);UpdateData(false);ShowRecord();/显示记录移到下一条记录m_pRecordset-MoveNext();curNo+;if(m_pRecordset-adoEOF)m_pRecordset-MoveLast();m_Status.Format(共有%d条记录,当前第%d条,count,curNo);UpdateData(false);ShowRecord();/显示记录移到上一条记录m_pRecordset-MovePrevious();curNo-;if(m_pRecordset-BOF)m_pRecordset-MoveFirst();m_Status.Format(共有%d条记录,当前第%d条,count,curNo);UpdateData(false);ShowRecord();/显示记录移到最后一条记录m_pRecordset-MoveLast();curNo=count;m_Status.Format(共有%d条记录,当前第%d条,count,curNo);UpdateData(false);ShowRecord();/显示记录删除当前记录void CADODataBase3Dlg:OnRemove() / TODO: Add your control notification handler code herem_pRecordset-Delete(adAffectCurrent);OnRadio3();/删除操作修改记录m_pRecordset-PutCollect(stuNo,_variant_t(m_strNumber);m_pRecordset-PutCollect(stuName,_variant_t(m_strName);m_pRecordset-PutCollect(stuSex,_variant_t(m_strSex);m_pRecordset-PutCollect(stuAddress,_variant_t(m_strAddress);m_pRecordset-Update();/提交记录m_Status=成功修改了一条记录!;UpdateData(false);在编辑框中显示记录void CADODataBase3Dlg:ShowRecord()m_strNumber=(char*)_bstr_t(m_pRecordset-GetCollect(stuNo);m_strName=(char*)_bstr_t(m_pRecordset-GetCollect(stuName);m_strSex=(char*)_bstr_t(m_pRecordset-GetCollect(stuSex);m_strAddress=(char*)_bstr_t(m_pRecordset-GetCollect(stuAddress);UpdateData(false);5.关闭连接释放对象记录集或连接都可以用Close()方法来关闭: m_pRecordset-Close();/关闭记录集对象m_pConnection-Close();/关闭连接对象至此,利用ADO已经可以实现对数据库的操作,接下来就是对程序框架的完善。四、编程步骤1、 启动Visual C+6.0,生成一个基于对话框的应用程序,将该程序命名为ADODataBase3;2、 在对话框界面上放置显示记录列表控件和添加、删除记录用的的编辑、按钮控件,具体设置参加代码中

温馨提示

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

评论

0/150

提交评论