C使用ADO及访问数据库.ppt_第1页
C使用ADO及访问数据库.ppt_第2页
C使用ADO及访问数据库.ppt_第3页
C使用ADO及访问数据库.ppt_第4页
C使用ADO及访问数据库.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

ADO数据库编程,第七章,2,回顾,设计应用程序菜单 为应用程序添加快捷键 弹出式菜单的设计 工具栏编程 状态栏编程 树控件及列表控件的使用,3,本章目标,了解MFC下各种访问数据库的方式 主要掌握ADO主要导出接口 掌握使用ADO进行数据库操作,4,ODBC、DAO和OLE DB,ODBC(开放数据库接口 )是一种标准的基于SQL的接口,它提供了应用程序与数据库之间的接口,使得任何一个数据库都可以通过ODBC驱动程序与指定的DBMS相连 DAO使用Jet数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等。可以打开一个Access数据库文件(MDB文件),也可直接打开一个ODBC数据源以及使用Jet引擎打开一个ISAM(被索引的顺序访问方法)类型的数据源(dBASE、FoxPro、Paradox、Excel或文本文件)。 OLE DB试图提供一种统一的数据访问接口,并能处理除了标准的关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(Directory Services)以及主机系统中的IMS和VSAM数据。OLE DB提供一个数据库编程COM(组件对象模型)接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个COM接口与ODBC相比,其健壮性和灵活性要高得多。,5,MFC ODBC技术,MFC的ODBC类对较复杂的ODBC API进行了封装,提供了简化的调用接口 CDatabase类:主要功能是建立与数据源的连接,可以在整个应用程序中共享这些信息。 CRecordset类:代表从数据源选择的一组记录。CRecordset类允许指定要运行的SQL查询,它将运行查询并维护自数据库返回的记录集。可以修改和更新记录,还可增加、删除记录,并将所做的变动反馈到该数据库中。 CRecordView类:提供了一个表单视图与某个记录集直接相连,利用对话框数据交换(DDX)机制在记录集与表单视图的控件之间传输数据。 CFieldExchange类:支持记录字段数据交换(DFX),即记录集字段数据成员与相应的数据库的标的字段之间的数据交换。 CDBException类:代表ODBC类产生的异常。,6,ADO,ADO是目前在Windows环境中比较流行的客户端数据库编程技术。它是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口。ADO使用户应用程序能够通过“OLE DB提供者”访问和操作数据库服务器中的数据。由于它兼具有强大的数据处理功能(处理各种不同类型的数据源、分布式的数据处理等等)和极其简单、易用的编程接口,因而得到了广泛的应用。 ADO技术基于COM(Component Object Model,组件对象模型),具有COM组件的许多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问包括关系数据库、非关系数据库及所有的文件系统。另外,ADO还支持各种B/S与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,是远程数据存取的发展方向。,7,ADO对象模型,连接对象Connection 通过连接可以从应用程序中访问数据源。连接时必须指定要连接的数据源以及连接所使用的用户名和用户口令。 命令对象Command 可以通过已建立的连接发出命令,从而对数据源进行指定操作。一般情况下,命令可以在数据源中添加、修改或删除数据,也可以检索数据。 参数对象Parameter 在执行命令时可以指定参数,参数可以在命令发布之前进行更改。例如,可以重复发出相同的数据检索命令,但是每一次指定的检索条件不同。 记录集对象Recordset 查询命令可以将查询结果储存在本地,这些数据以行为单位,返回数据的集合被称为记录集 字段对象Field 一个记录集包含一个或多个字段。每一字段(列)都包含名称、数据类型和值属性。 错误对象Error 错误可随时在程序中发生,通常是由于无法建立连接、执行命令或对某些状态的对象进行操作。 属性对象Property,8,ADO的4种类型的集合,Connection对象具有Errors集合,包含为响应与数据源有关的单一错误而创建的所有Error对象。 Command对象具有Parameters集合,包含应用于Command对象的所有Parameter对象。 Recordset对象具有Fields集合,包含Recordset对象中所有列的Field对象。 Connection对象、Command对象、Recordset对象和Field对象都具有Properties集合,它包含各个对象的Property对象。,9,使用ADO创建数据库应用程序,在MFC应用程序中使用ADO数据库的一般过程是: 添加对ADO的支持; 创建一个数据源连接; 对数据源中的数据库进行操作; 关闭数据源。,10,引入ADO库,在Visual C+中,使用ADO开发数据库之前需要引入ADO库。可以在StdAfx.h文件末尾处引入ADO库文件 #endif / _AFX_NO_AFXCMN_SUPPORT #include / MFC support for Windows Common Controls #import “C:Program FilesCommon FilesSystemADOmsado15.dll“ no_namespace rename(“EOF“, “adoEOF“) #include /AFX_INSERT_LOCATION 预编译命令#import是编译器将此命令中所指定的动态链接库文件引入到程序中,并从动态链接库文件中抽取出其中的对象和类的信息。 icrsint.h文件包含了Visual C+扩展的一些预处理指令、宏等的定义,用于与数据库数据绑定。,11,连接到数据库2-1,在能够使用ADO对象之前,必须为应用程序初始化COM环境 BOOL CADOApp:InitInstance() :CoInitialize(NULL); AfxEnableControlContainer(); 建立数据库的连接需要使用连接对象Connection。首先定义一个_ConnectionPtr类型指针,然后调用CreateInstance方法实例化,例如: _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(_uuidof(Connection);,12,连接到数据库2-2,ADO使用Connection对象来建立与数据库服务器的连接,它相当于MFC中的CDatabase类。和CDatabase类一样,调用Connection对象的Open即可建立与服务器的连接 函数原型:HRESULT Connection:Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) 参数:ConnectionString为连接字串,UserID是用户名,Password是登录密码,Options是选项,通常用于设置同步和异步等方式。_bstr_t是一个COM类,用于字符串BSTR(用于Automation的宽字符)操作。 不同的数据,其连接字串有所不同:,13,Connection对象,Connection对象除了建立与数据库服务器的连接外,还可以通过OpenSchema来获取数据源的自有信息,如:数据表信息、表字段信息以及所支持的数据类型等。 OpenSchema方法中的adSchemaColumns是一个预定义的枚举常量,用来获取与“列”(字段)相关的信息记录集。该信息记录集的主要字段名有“TABLE_NAME”、“COLUMN_NAME”;类似的,若在OpenSchema方法中指定adSchemaTables枚举常量,则返回的记录集的字段名主要有“TABLE_NAME”、“TABLE_TYPE”。,14,Recordset对象,上述的OpenSchema函数返回的是记录集指针_RecordsetPtr,对应类型Recordset对象 _RecordsetPtr指针与数据库是的游标类似,可以遍历一到多个记录集,常用指针指向操作有指向下一条记录MoveNext()、指向上一条记录MovePrevious ()、指向第一条记录MoveFirst()、指向最后一条记录MoveLast()、指向下一个记录集NextRecordset() 访问对应字段记录值用GetCollect (“字段名“)或 Fields-GetItem(“字段名“)-GetValue(),15,例子3-1,(1) 用MFC AppWizard创建一个默认的单文档应用程序Ex_ADO,但在向导的第6步将CEx_ADOView的基类由默认的CView选择为CListView类,以便更好地显示和操作数据表中的记录。 (2) 在CEx_ADOView:PreCreateWindow函数添加下列代码,用来设置列表视图内嵌列表控件的风格: BOOL CEx_ADOView:PreCreateWindow(CREATESTRUCT /_ConnectionPtr、_RecordsetPtr和_CommandPtr分别是ADO对象Connection、Recordset和Command的智能指针类型。,16,3-2,void CEx_ADOView:OnInitialUpdate() CListView:OnInitialUpdate(); m_pConnection.CreateInstance(_uuidof(Connection); / 初始化Connection指针 m_pRecordset.CreateInstance(_uuidof(Recordset); / 初始化Recordset指针 m_pCommand.CreateInstance(_uuidof(Command); / 初始化Recordset指针 / 连接数据源为“Database Example For VC+“ m_pConnection-ConnectionString = “DSN=Database Example For VC+“; m_pConnection-ConnectionTimeout = 30; / 允许连接超时时间,单位为秒 HRESULT hr = m_pConnection-Open(“,“,“,0); if (hr != S_OK) MessageBox(“无法连接指定的数据库!“); / 获取数据表名和字段名 _RecordsetPtr pRstSchema = NULL; / 定义一个记录集指针 pRstSchema = m_pConnection-OpenSchema(adSchemaColumns);/ 获取表信息 / 将表信息显示在列表视图控件中 CListCtrl,17,3-3,for (int i=0; iadoEOF) str.Format(“%d“, nItem+1 ); m_ListCtrl.InsertItem( nItem, str ); for (int i=1; iFields-GetItem(_bstr_t)(LPCSTR)strHeaderi)-Value; m_ListCtrl.SetItemText( nItem, i, value ); pRstSchema-MoveNext(); nItem

温馨提示

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

评论

0/150

提交评论