2022年ADO数据库编程 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年ADO数据库编程 .pdf》由会员分享,可在线阅读,更多相关《2022年ADO数据库编程 .pdf(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ADO 数据库编程数据库访问技术ODBC (开放数据库接口)是一种标准的基于SQL的接口,它提供了应用程序与数据库之间的接口,使得任何一个数据库都可以通过ODBC 驱动程序与指定的 DBMS 相连DAO 使用 Jet 数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等。可以打开一个Access 数据库文件 (MDB文件 ) ,也可直接打开一个 ODBC 数据源以及使用Jet 引擎打开一个ISAM(被索引的顺序访问方法)类型的数据源 (dBASE 、FoxPro、Paradox、Excel 或文本文件 ) 。OLE DB试图提供一种统一的数据访问接口,并能处理除了标准的关
2、系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(Directory Services)以及主机系统中的IMS 和 VSAM 数据。 OLE DB提供一个数据库编程 COM( 组件对象模型 ) 接口,使得数据的使用者( 应用程序 )可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个 COM 接口与 ODBC 相比,其健壮性和灵活性要高得多。RDO(Remote Data Object) ,远程数据对象。由于RDO 直接调用 ODBC API(而不是像 DAO那样通过 Jet 引擎 ) ,所以,可以为使用关系数据库的应用程序提供更好的性能。
3、ADO 是目前在 Windows环境中比较流行的客户端数据库编程技术。它是Microsoft为最新和最强大的数据访问范例OLE DB而设计的,是一个便于使用的应用程序层接口。ADO使用户应用程序能够通过“OLE DB提供者”访问和操作数据库服务器中的数据。由于它兼具有强大的数据处理功能( 处理各种不同类型的数据源、分布式的数据处理等等) 和极其简单、易用的编程接口,因而得到了广泛的应用。ADO 技术基于 COM(Component Object Model ,组件对象模型),具有 COM 组件的许多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问包括关系数据库、非关系数据库及所有的文
4、件系统。另外,ADO 还支持各种B/S 与基于 Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,是远程数据存取的发展方向。MFC ODBC 技术名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 49 页 - - - - - - - - - MFC 的 ODBC 类对较复杂的ODBC API进行了封装,提供了简化的调用接口CDatabase 类:主要功能是建立与数据源的连接,可以在整个应用程序中共享这些信息。CRecordset 类:
5、代表从数据源选择的一组记录。CRecordset 类允许指定要运行的SQL查询, 它将运行查询并维护自数据库返回的记录集。可以修改和更新记录,还可增加、删除记录,并将所做的变动反馈到该数据库中。CRecordView 类:提供了一个表单视图与某个记录集直接相连,利用对话框数据交换 (DDX)机制在记录集与表单视图的控件之间传输数据。CFieldExchange 类:支持记录字段数据交换(DFX),即记录集字段数据成员与相应的数据库的标的字段之间的数据交换。CDBException 类:代表 ODBC 类产生的异常。ADO 技术简介ADO 对象模型连接对象 Connection通过连接可以从应用
6、程序中访问数据源。连接时必须指定要连接的数据源以及连接所使用的用户名和用户口令。命令对象 Command可以通过已建立的连接发出命令,从而对数据源进行指定操作。一般情况下,命令可以在数据源中添加、修改或删除数据,也可以检索数据。参数对象 Parameter在执行命令时可以指定参数,参数可以在命令发布之前进行更改。例如,可以重复发出相同的数据检索命令,但是每一次指定的检索条件不同。记录集对象Recordset查询命令可以将查询结果储存在本地,这些数据以行为单位,返回数据的集合被称为记录集字段对象 Field一个记录集包含一个或多个字段。每一字段( 列) 都包含名称、数据类型和值属性。错误对象 E
7、rror错误可随时在程序中发生,通常是由于无法建立连接、执行命令或对某些状态的对象进行操作。属性对象 Property 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 49 页 - - - - - - - - - ADO 的 4 种类型的集合Connection 对象具有 Errors集合,包含为响应与数据源有关的单一错误而创建的所有 Error对象。Command 对象具有 Parameters 集合, 包含应用于 Command 对象的所有 Parameter对象。R
8、ecordset 对象具有 Fields集合, 包含 Recordset 对象中所有列的Field对象。Connection 对象、 Command 对象、 Recordset 对象和 Field对象都具有Properties集合,它包含各个对象的Property对象。使用 ADO 创建数据库应用程序在 MFC应用程序中使用ADO 数据库的一般过程是:添加对 ADO的支持;创建一个数据源连接;对数据源中的数据库进行操作;关闭数据源。引入 ADO 库在 Visual C+ 中,使用 ADO开发数据库之前需要引入ADO库。可以在 StdAfx.h文件末尾处引入ADO库文件#endif / _AFX
9、_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+扩展的一些预处理指令、宏等的定义,用于与数据库数
10、据绑定。连接到数据库在能够使用ADO对象之前,必须为应用程序初始化COM 环境BOOL CADOApp:InitInstance() :CoInitialize(NULL); AfxEnableControlContainer(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 49 页 - - - - - - - - - , 建立数据库的连接需要使用连接对象Connection 。首先定义一个_ConnectionPtr类型指针,然后调用CreateInstance方
11、法实例化,例如:_ConnectionPtr m_pConnection; m_pConnection.CreateInstance(_uuidof(Connection); ADO 使用 Connection 对象来建立与数据库服务器的连接,它相当于MFC中的CDatabase 类。和 CDatabase 类一样,调用Connection 对象的 Open即可建立与服务器的连接函数原型: HRESULT Connection:Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) 参数:
12、ConnectionString为连接字串, UserID 是用户名, Password是登录密码, Options 是选项,通常用于设置同步和异步等方式。_bstr_t是一个 COM 类, 用于字符串 BSTR(用于 Automation 的宽字符 )操作。不同的数据,其连接字串有所不同:Connection 对象Connection 对象除了建立与数据库服务器的连接外,还可以通过OpenSchema来获取数据源的自有信息,如:数据表信息、表字段信息以及所支持的数据类型等。OpenSchema 方法中的 adSchemaColumns是一个预定义的枚举常量,用来获取与“列” ( 字段 ) 相
13、关的信息记录集。该信息记录集的主要字段名有“TABLE_NAME”、“COLUMN_NAME”;类似的,若在OpenSchema 方法中指定adSchemaTables 枚举常量,则返回的记录集的字段名主要有“TABLE_NAME”、“TABLE_TYPE”。Recordset 对象上述的 OpenSchema函数返回的是记录集指针_RecordsetPtr,对应类型Recordset 对象_RecordsetPtr指针与数据库是的游标类似,可以遍历一到多个记录集,常用指针指向操作有指向下一条记录MoveNext() 、指向上一条记录MovePrevious () 、指向第一条记录MoveFi
14、rst()、指向最后一条记录MoveLast() 、指向下一名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 49 页 - - - - - - - - - 个记录集 NextRecordset() 访问对应字段记录值用GetCollect (字段名 ) 或 Fields-GetItem(字段名)-GetValue() Command 对象Command 对象专门用来操作数据库命令,如添加记录,删除记录,修改记录。当然也可以用它来返回数据集,比如调用数据库中的存储过程,就可以
15、返回一到多个记录集,在该过程中可能会用到Parameter 参数对象此外,为了确保数据的一致性等要求,可能还会用到数据库事务处理,即连接对象的操作开始事务提交事务,回滚事务等操作执行 SQL命令调用 Recordset 对象的 Open方法_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作。_RecordsetPtr m_pRecordset;/初始化 Recordset 指针m_pRecordset.CreateInstance(_uuidof(Recordset); HRESULT rr=m_pRecordset-Open( “SELECT
16、*FROM table_mode ”,m_pConnection.GetInterfacePtr,adOpenDynamic,adLockOptimistic,adCmdText); 读取表内数据如果没有遇到表结束标志adoEOF,则用 GetCollect (字段名 ) 或m_pRecordset-Fields-GetItem(字段名 )-Value方法,来获取当前记录指针所指的字段值,然后再用MoveNext() 方法移动到下一条记录位置。关闭记录集直接用 Close 方法关闭记录集并赋予其空值m_pRecordset-Close(); m_pRecordset=NULL; 关闭一个库连接
17、如果连接状态有效,则用Close 方法关闭记录集并赋予其空值If(m_pConnection-State) m_pConnection-Close(); m_pConnection=NULL; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 49 页 - - - - - - - - - Cnnection对象的 Execute 方法说明如下:Execute(_bstr_t CommandText,VARIANT * RecordsAffected,long Options
18、) 其中 CommandText是命令字符串 , 通常是 SQL命令参数 RecordsAffected是操作完成后所影响的行数参数 Options 表示 CommandText的类型。adCmdText-文本命令 adCmdTable-表名adCmdProc-存储过程 adCmdUnknown-未知例子(1) 用 MFC AppWizard 创建一个默认的单文档应用程序Ex_ADO ,但在向导的第6 步将 CEx_ADOView 的基类由默认的CView选择为 CListView类,以便更好地显示和操作数据表中的记录。(2) 在 CEx_ADOView:PreCreateWindow 函数添
19、加下列代码,用来设置列表视图内嵌列表控件的风格:BOOL CEx_ADOView:PreCreateWindow(CREATESTRUCT& cs) cs.style |= LVS_REPORT; / 报表风格return CListView:PreCreateWindow(cs); (3) 在 stdafx.h文件中添加对ADO 支持的代码(4) 在 CEx_ADOApp:InitInstance函数中添加下列代码,用来对ADO 的 COM环境进行初始化(5) 在 Ex_ADOView.h文件中为 CEx_ADOView 定义三个 ADO 对象指针变量:public: _Connection
20、Ptr m_pConnection; _RecordsetPtr m_pRecordset; _CommandPtr m_pCommand; /_ConnectionPtr、_RecordsetPtr和_CommandPtr分别是 ADO 对象Connection 、Recordset 和 Command 的智能指针类型。void CEx_ADOView:OnInitialUpdate() CListView:OnInitialUpdate(); m_pConnection.CreateInstance(_uuidof(Connection); / 初始化Connection 指针m_pRec
21、ordset.CreateInstance(_uuidof(Recordset); / 初始化Recordset 指针m_pCommand.CreateInstance(_uuidof(Command); / 初始化 Recordset指针名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 49 页 - - - - - - - - - / 连接数据源为 Database Example For VC+ m_pConnection-ConnectionString = DSN=
22、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
23、& m_ListCtrl = GetListCtrl(); CString strHeader3 = 序号,TABLE_NAME,COLUMN_NAME; 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
24、+; pRstSchema-Close(); VC+下使用 ADO编写数据库程序准备:(1) 、引入 ADO 类名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 49 页 - - - - - - - - - #import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF) (2) 、初始化 COM 在 MFC 中可以用 AfxOleInit();非 MFC 环境
25、中用 : CoInitialize(NULL); CoUnInitialize(); (3)#import 包含后就可以用3 个智能指针了 :_ConnectionPtr、_RecordsetPtr和_CommandPtr 1. 连接和关闭数据库(1) 连接例子 : 连接 Access 数据库AfxOleInit();/初始化HRESULT hr; try hr = m_pConnection.CreateInstance(ADODB.Connection);/创建Connection对象if(SUCCEEDED(hr) m_pConnection-ConnectionTimeout = 0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ADO数据库编程 2022 ADO 数据库 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内