第11章一个数据库应用系统的设计与实现.ppt_第1页
第11章一个数据库应用系统的设计与实现.ppt_第2页
第11章一个数据库应用系统的设计与实现.ppt_第3页
第11章一个数据库应用系统的设计与实现.ppt_第4页
第11章一个数据库应用系统的设计与实现.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、数据库应用结构,数据库系统的应用结构分类: 单用户数据库应用结构: 运行于PC机称桌面DBMS 主要产品 不完备方面:,Microsoft Access、Paradox、Fox系列和DBase系列,数据的一致性维护、完整性检查及安全性管理方面有许多欠缺,集中式结构 文件服务器结构 客户/服务器式结构 互联网应用结构,多用户数据库应用结构,集中式结构 主机/终端结构是大型主机系统使用的结构,这种结构是将操作系统、应用程序、DBMS、数据库等数据和资源均放在主机上,以一台主机为核心,连接多个终端,终端只是作为主机的一种I/O设备,所有的应用处理均由主机承担,多用户数据库应用系统分类:,集中式数据库

2、应用结构,文件服务器结构,数据库 网络文件服 务器,客户端,文件请求,文件,工作站1 应用程序,Microsoft Access、FoxPro是流行的支持文件服务器结构的数据库管理系统,客户服务器: 通过对服务功能的分布实现分工服务,其中:,多用户数据库应用系统分类:,客户/服务器式数据库应用结构,数据库 服务器,客户端,请求,结果,工作站1 应用程序,客户机负责管理用户界面,接收用户数据,处理应用逻辑,生成数据库服务请求。然后将这些请求发送给服务器,接收服务器返回的结果,最后再将这些结果按一定的格式返回给用户; 服务器接收客户机的请求,处理这些请求,返回处理结果(包括执行状态:成功、失败以及

3、数据库访问的结果数据)给客户机,同时,服务器还要进行数据库完整性检查,维护数据库附加的数据,支持并发控制等 主流的产品:Microsoft公司的SQL Server、SYBASE公司的Sybase、ORACLE公司的Oracle、INFORMIX公司的Informix和IBM公司的DB2,数据库服务器,客户端,请求,页面,浏览器,数据库,请求,结果,互联网应用结构,应用程序,Web服务器,数据库有Microsoft SQL Server 、 Orcale、Sybase、DB2和Informix都可作为服务器端的DBMS,一些桌面数据库管理系统如Access等也可作为这种结构的DBMS。 Web

4、服务器有 Microsoft的IIS(Internet Information Server)、 PWS(Personal Web Server),Visual c+中的数据访问,ODBC开放数据库连接 DAO(Data Access Objects )数据访问对象 OLE DB技术 ActiveX Data Object(ADO),1 DAO(Data Access Objects )数据访问对象 DAO使用Microsoft Jet提供的数据库访问对象集直接访问DBMS,速度比ODBC要快。 Visual C+6.0不支持Acess97以后的mdb数据库,所以Access2000生成的数据

5、库需要转换为Acess97格式,微软公司20世纪90年代初开发的一套开放数据库系统应用程序接口规范,提供了统一的数据库应用编程接口(API函数) ODBC的工作依赖于数据库制造商提供的驱动程序 使用ODBC API时,Windows的ODBC管理程序把数据库访问请求传递给正确的驱动程序,驱动程序使用SQL语句指示DBMS完成数据库访问工作 使用ODBC时,必须把数据库注册到ODBC驱动程序管理器,可通过定义一个DSN(数据源名称)来完成,2.开放数据库互连(ODBCOpen DataBase Connectivity),ODBC的体系结构示意图(4部分),ODBC管理器 在Windows200

6、0或Windows XP下,通过【控制面板】-【管理工具】-【数据源ODBC】打开ODBC管理器 使用ODBC管理器设置ODBC数据源: 可以定义3种数据源: 用户DSN:只有当前用户可见,而且只能用于当前计算机上 系统DSN:对当前计算机上的所有用户都是可见的 文件DSN:介于用户DSN和系统DSN之间 设置Acess数据源举例,3.OLE DB OLE DB 是一种高性能的、基于 COM(组件对象模型) 的数据库技术 Microsoft公司20世纪90年代中期提出的。 OLE DB不仅为关系数据库设计的,而且也是为其它类型的数据库设计的。 OLE DB组件由数据提供者、数据消费者和服务组件

7、组成;数据提供者提供数据,数据消费者使用数据,服务组件处理和传送数据。 OLE DB提高了数据库的访问速度,4. ADO技术介绍,ADO简介 ADO技术特点 ADO对象模型 开发ADO应用程序的方法,ADO简介,ADO是Microsoft的数据库应用程序开发的新接口,是建立在OLE DB之上的高级数据库访问技术。避免了开发人员直接使用 OLE DB底层接口的麻烦。 ADO技术基于COM(Component Object Model),可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库以及所有的文件系统。 另外,ADO还支持各种客户/服务器模式与基于Web的数据操作。,

8、ADO技术特点,易于使用 高速访问数据源 可以访问不同的数据源 可以用于Microsoft ActiveX页 程序占用的内存少,ADO对象模型,连接对象Connection 命令对象Command 记录集对象Recordset 域对象Field 参数对象Parameter 属性对象Property 错误对象Error 错误集合 Errors 参数集合 Parameters 域集合 Fields 属性集合 Properties,ADO对象模型提供了7种对象、4种集合。分别为:,连接对象Connection 常用属性: ConnectionString:包含用于建立链接的信息。 Connectio

9、nTimeOut:设置连接的最长时间,缺省值为15秒 Mode:访问权限设置 Provider:设置连接提供者的名称 主要函数: Open:打开到数据源的连接 Execute: 执行查询、其它SQL语句、存储过程等 Close:关闭连接,命令对象Command 常用属性: 1)ActiveConnection:指明属于哪一个Connection对象。 2)CommandText:设置命令内容,如SQL语句等 3)CommandTimeout :确定执行命令最长的等待时间 4)CommandType:指明命令类型, 可以是表格名adCmdTable、 SQL语句等. 主要函数: Execute:

10、 执行在CommandText中指定的查询、SQL语句或存储过程等,记录集对象Recordset 主要函数: Open:打开一个记录集 Close:关闭记录集 MoveFirst:移动到记录集的第一条 MoveLast:移动到记录集的最后一条 MoveNext :移动到记录集中当前记录的后一条 MovePrevious :移动到记录集中当前记录的前一条 Move:移动到记录集中指定位置 AddNew :添加一个空记录 Delete:删除当前记录 Update:将对记录集的改动保存到数据源中,常用属性: (1) ActiveConnection:指明属于哪一个Connection对。 (2)EO

11、F:EOF=TRUE指当前位置位于记录集中最后一条记录之后 (3)BOF:BOF=TRUE指当前位置位于记录集中第一条记录之前 (4)AbsolutePosition:某条记录在记录集中的绝对位置 (5)RecordCount:记录集中包含的记录总数 (6)CursorType:指明记录集的游标类型。有动态型、静态型、仅向前型和键型,对应的参数分别为adOpenDynamic、adOpenStatic、adOpenForwardOnly和adOpenKeyset. 动态型游标允许用户看到其它用户对记录的增加、修改和删除; 静态型游标是记录集的拷贝,用户看不到其他用户对记录集的改变操作; 仅向前

12、型游标等同于静态型游标,不过只能在记录集中向前移动; 键型游标同动态型游标相似,只不过它防止用户看到其它用户添加的记录,也不允许对其他用户删除的记录进行访问。,域对象Field:代表字段(列) 常用属性: Name:返回字段名 Value:设置字段中的数据 Type:返回字段的数据类型 域集合 Fields Fields包含Recordset对象的所有Field对象。每个Field对象对应记录集中的一列。 常用函数: Append:添加新的Field对象到集合中 Delete:从集合中删除Field对象 Refresh:更新集合中的Field对象 Item:返回集合中的Field对象 常用属性

13、: Count:集合中Field对象总数,开发ADO应用程序的方法,使用ADO Data控件 简单,用户只需写相对较少的代码,甚至不写一行代码,可以实现对数据库的访问。其缺点是效率比较低,用户对程序的控制比较弱,不能充分发挥ADO的强大功能; 直接使用ADO对象 这种方法可以非常灵活地控制程序的细节,而且效率、性能很高,可以充分发挥ADO的特性。,11.4.1 数据库访问控件 一.ADO Data控件 可以用ADO Data控件快速创建一个到数据库的连接; ADO Data控件使用Recordset对象提供对存储在数据库中数据的访问,并允许从一个记录移动到另一个记录 ADO Data控件可以执

14、行大部分数据库访问操作,但不能显示数据库中数据的内容,需要与数据觉察控件结合使用,创建一个基于对话框的工程,工程名为ADOData 将ADO Data控件添加到工程: Project/add to project/components and controls,打开components and controls Gallery对话框:,例1: ADO Data控件的使用,双击”registered ActiveX Controls”,可以看到已注册的ActiveX控件:,双击ADO Data控件后:,单击确定按钮后弹出confirm classes窗口:,单击OK后,系统自动在工程中添加个类

15、关闭窗口后,在工具栏中新増ADO Data控件按钮:,ADO Data控件的常用属性 (1)ConnectionString 用于建立链接。可以为该属性赋予一个包含建立联接信息的文件,称为数据链接文件(后缀为UDL),也可以直接赋予链接字符串,或使用ODBC链接。 (2)ConnectionTimeOut属性 设置连接的最长时间 (3)RecordSource 设置一个数据记录源,可以是表、视图或SELECT语句等 (4)UserName和Password属性 用于对有密码保护的数据库的访问。如果使用链接字符串,可以在链接字符串中指明这两个属性的值。 BOF和 EOF MaxRecords 返

16、回Recordset对象中记录的数量,将ADO Data控件添加到对话框中,右键单击ADO Data控件,打开控件属性窗口,如图:,单击“通用”选项卡,设置连接属性,如图:,选择“使用连接字符串”,单击“生成”按钮后:,确定,单击“记录源”选项卡:,DataGrid控件 添加到工程: Microsoft DataGrid Control,Version 6.0(OLE DB),二、数据觉察控件,将DataGrid控件添加到对话框:,打开控件属性窗口,如图:,DataSource选择IDC_ADODC1; 设置Caption; 运行工程:,该系统的主要功能包括:在DataGrid表格中显示学生的

17、主要信息;可以添加、修改、删除学生数据,11.4.2 使用ADO对象开发数据库应用程序,初始化OLE/COM库环境 引入ADO库文件 用connection对象连接数据库 利用建立好的连接,通过connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集 记录集的遍历、更新 断开连接,结束,ADO中的智能指针,_ConnectionPtr :通过该指针操作Connection对象 _CommandPtr :通过该指针操作Command对象 _RecordsetPtr :通过该指针操作Recordset对象,使用ADO对象时没有相关的MFC类,在使用Conn

18、ection对象、Command对象、Recordset对象这3个对象的时候,需要定义与之对应的3个智能指针,分别为,#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF),在“stdafx.h”中引入ADO库,初始化OLE/COM库环境,在能够使用ADO对象之前,必须为应用程序初始化COM环境。代码如下: : CoInitialize(NULL); 当完成所有的ADO活动时,还必须通过调用函数CoUnitialize关闭COM环境,代码如下: :CoUnitialize

19、(); 这个函数可清除COM环境,并准备关闭应用程序。 还可用:AfxOleInit(),该函数可以自动实现初始化COM环境和结束时关闭COM的操作,创建ADO与数据源的连接,当初始化COM环境后,就可以创建与数据库的连接。首先定义一个_ConnectionPtr类型指针,然后调用CreateInstance方法实例化: _ConnectionPtr m_pConnection; m_pConnection. CreateInstance(_uuidof(Connection); 或者采用另一种CreateInstance的重载函数: m_pConnection. CreateInstance

20、(“ADODB.Connection”);,之后,调用Connection对象的Open方法创建数据库的连接 其定义如下: HRESULT Connection15:Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password,long Options) 参数: ConnectionString:可选,字符串,包含了连接信息 UserID:可选,字符串,用户名 Password:可选,字符串,密码 Options:可选,ConnectOptionEnum值,其值如下所示: adModeUnknown:默认,表示当前的许可权未设置

21、 adModeRead:只读 adModeWrite:只写 adModeReadWrite:可以读写 .,AfxOleInit(); m_pConnection. CreateInstance(_uuidof(Connection); try m_pConnection-Open(“Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Demo.mdb” , “” , “”, adModeUnknown); catch(_com_error e) /处理异常 AfxMessageBox(e.ErrorMessage(); ,其它常用的连接方式: 通过DSN

22、数据源对支持ODBC的数据库进行连接: m_pConnection-Open(“ Data Source=Demo;UID=sa;PWD=;” , “” , “”, adModeUnknown); 不通过DSN对SQL SERVER数据库的链接: m_pConnection-Open(“ driver=SQL Server;Server=127.0.0.1;DATABASE=Demo;UID=sa;PWD=” , “” , “”, adModeUnknown); 使用UDL文件链接: m_pConnection-Open(“File Name=cmydata.udl” , “” , “”, N

23、ULL); 新建】-【Microsoft数据连接】 新建一个文本文件,再将后缀改为”.udl”, 双击udl文件,可视化地完成数据连接,获得记录集,_RecordsetPtr m_pRecordset; /定义记录集指针 m_pRecordset.CreateInstance(_uuidof(Recordset); /实例化 打开记录集,打开记录集方法: 用Connection对象的Execute方法执行SQL命令 用Command对象执行SQL命令 用Recordset对象的Open函数打开记录集 HRESULT Recordset 15:Open(const_variant_t BSTR

24、bstrSQL=strSql.AllocSysString(); m_pRecordset-Open(“select * from STUDENT”, theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); /打开记录集 Catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); ,遍历记录集,MoveFirst() MoveLast() MoveNext() MovePrevious() Try while(!m_pRecordset

25、-adoEOF) m_pRecordset- MoveNext() ; Catch(_com_error *e) AfxMessageBox(e-ErrorMessage(); ,访问记录集中的数据,GetCollect () GetItem(),_ Variant_t theVal; /从ADO记录集得到的数据都是Variant型 CString strName; theVal=m_pRecordset-GetCollect(“NAME”); if(theVal.vt!=VT_NULL) strName=(LPCSTR)_bstr_t(theValue); theVal=m_pRecords

26、et-Fields-GetItem(“AGE”)-Value(); if(theVal.vt!=VT_NULL) nAge=theVal.iVal;,添加记录,使用记录集对象的AddNew方法,CString m_Name= “王晶晶” ; long m_Age=30; m_pRecordset-AddNew( ); m_pRecordset-PutCollect(“NAME”,_ Variant_t(m_Name); m_pRecordset-PutCollect(“AGE”, m_Age ); m_pRecordset-Update( );,修改记录,CString m_Name= “王晶

27、晶” ; long m_Age=30; m_pRecordset-PutCollect(“NAME”,_ Variant_t(m_Name); m_pRecordset-PutCollect(“AGE”, m_Age ); m_pRecordset-Update( );,查询记录,CString m_Name= “王晶晶” ; CString m_class=“123”; CString strSql; strSql.Format(“SELECT *FROM student WHERE Name=%s AND Class=%s”, m_Name, m_class); m_pRecset-Ope

28、n(strSql.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);,使用ADO对象开发数据库应用程序,在文件Stdfx.h文件中增加引入ADO库的代码 #import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF),步骤一 引入ADO库,二、初始化COM环境,创建连接对象,在应用程序类所在的代码区(*App.cpp)最前面定义

29、全局变量 _ConnectionPtr m_pConnection; 并在”*App.h”中加入: extern _ConnectionPtr m_pConnection; BOOL CADObApp:InitInstance() AfxOleInit( ); m_pConnection.CreateInstance(ADODB.Connection); m_pConnection- Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=studentDB.mdb,adModeUnknown); . ,三、打开记录集(初始化对话框 ),在对话框类加

30、入成员变量: protected: _RecordsetPtr m_pRecordset; 用ClassWizard给窗口中每个编辑框添加成员变量,本例添加的有: m_stuid, m_name,m_age, m_sex, m_subject 在对话框类的初始化函数中加入以下代码: m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset-Open(SELECT * FROM STUDENT, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic,adCm

31、dText); /显示记录到界面上 DispRecord();,显示记录函数,void CADODlg:DispRecord() _variant_t theValue; /获取学号的值 if(!m_pRecordset-adoEOF) theValue=m_pRecordset-GetCollect(stuID); if(theValue.vt!=VT_NULL) m_stuid=(char*)_bstr_t(theValue); theValue=m_pRecordset-GetCollect(name); /获取学生姓名 if(theValue.vt!=VT_NULL) m_name=(

32、char *)_bstr_t(theValue); theValue=m_pRecordset-GetCollect(age); /获取学生年龄 if(theValue.vt!=VT_NULL) m_age=theValue.iVal; theValue=m_pRecordset-GetCollect(sex); /获取学生性别 if(theValue.vt!=VT_NULL) m_sex=(char *)_bstr_t(theValue); theValue=m_pRecordset-GetCollect(subject); /获取学生专业 if(theValue.vt!=VT_NULL)

33、m_subject=(char *)_bstr_t(theValue); UpdateData(FALSE);,浏览记录,void CADODlg:OnNextButton() /后一条 / TODO: Add your control notification handler code here m_pRecordset-MoveNext(); if(m_pRecordset-adoEOF) m_pRecordset-MoveLast(); DispRecord(); void CADObDlg:OnPreButton() /前一条 / TODO: Add your control notification handler code here m_pRecordset-MovePrevious(); if(m_pRecordset-adoBOF) m_pRecordset-MoveFirst(); DispRecord(); ,添加记录,void CADObDlg:OnAddButton() / TODO: Add your control notification handler code here RefreshData(

温馨提示

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

评论

0/150

提交评论