数据库编程总结(2)

上传人:飞*** 文档编号:43441657 上传时间:2018-06-06 格式:DOC 页数:17 大小:72.50KB
返回 下载 相关 举报
数据库编程总结(2)_第1页
第1页 / 共17页
数据库编程总结(2)_第2页
第2页 / 共17页
数据库编程总结(2)_第3页
第3页 / 共17页
数据库编程总结(2)_第4页
第4页 / 共17页
数据库编程总结(2)_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《数据库编程总结(2)》由会员分享,可在线阅读,更多相关《数据库编程总结(2)(17页珍藏版)》请在金锄头文库上搜索。

1、5. OLE DB Templates 连接使用 OLE DB 接口编程属于最低可能层,代码冗长并且很难维护。因此 MS Visual Studio 对 OLE DB 进一步抽象和封装,提供 COM OLE DB Templates 这个可行的中间层,从而简化了 OLE DB 应用程序的编写。OLE DB Templates 编写客户数据库程序方法:以 MFC AppWizard 为向导建立应用程序框架,添加 OLE DB 支持的头文件,然后使用 OLE DB 类进行数据库应用开发。以 ATL COM AppWizard 为向导建立应用程序框架,该框架直接支持 OLE DB 模板类。OLE D

2、B Templates 包括:Consumer Templates 和 Provider Templates。(1) Consumer Templates 使用者模板使用者模板(Consumer Templates)体系结构:(2) Provider Templates 服务器模板服务器模板类体系结构:6. ADO 连接ADO(ActiveX Data Object,ActiveX 数据对象)是 MS 为最新和最强大的数据访问接口 OLE DB 而设计,是一个便于使用的应用程序层接口。ADO 是一种面向对象的、与语言无关的(Language_Neutral)数据访问应用编程接口。它对 OLE

3、DB API 进行封装,实现对数据的高层访问,同时它也提供了多语言的访问技术,此外,由于 ADO 提供了访问自动化接口,它也支持脚本语言。ADO 最主要的优点在于易于使用、速度快、内存支出少和磁盘遗迹小。ADO 是用来访问 OLE DB 的数据库技术。在模型层次上它基于 OLE DB,但在应用上又高于 OLE DB,因此它简化了对对象模型的操作,并且不依赖于对象之间的相互层次关系。但是 OLE 的接口可以数据提供程序、服务提供程序和数据使用程序使用,而 ADO 所提供的对象只能被数据应用程序使用。并且,ADO 对象使用了 OLE DB 服务提供程序和 OLE DB 数据提供程序所提供的接口和服

4、务。(1)ADO 访问数据库的结构原理图:(2)ADO 对象模型:ADO 对象模型包括以下关键对象:Connection 对象:在数据库应用里操作数据源都通过该对象,这是数据交换的环境,代表与数据源的一个会话。Command 对象:是一个对数据源执行命令的定义。Parameter 对象:用于制定参数化查询或者存储过程的参数。Recordset 对象:是执行结果集存储到本地的 ADO 对象。Field 对象:ADO 中对列进行操作的对象。Error 对象:对 ADO 数据操作时发生错误的详细描述。Property 对象:代表一个由提供者定义的 ADO 对象的动态特征。ADO 对象编程模型: Pa

5、rameters Collection Execute Source Error Collection (Optional) Active Fields Connection Collection(3)ADO 编程一般步骤:创建一个 Connection 对象。打开数据源,建立同数据源的连接。执行一个 SQL 命令。使用结果集。终止连接。(4)ADO 的数据库访问规范引入 ADO 支持#import Program FilesCommon FilesSystemadomsado*.dll初始化和释放 ADO 环境:CoInitialize(NULL); CoUninitialize();封装的

6、 ADO 类 A set of ADO classes:http:/ 编程小结:http:/ Visual C+中用 ADO 进行数据库编程1. 生成应用程序框架并初始化 OLE/COM 库环境创建一个标准的 MFC AppWizard(exe)应用程序,然后在使用 ADO 数据库的 InitInstance 函数中初始化OLE/COM 库(因为 ADO 库是一个 COM DLL 库)。本例为: BOOL CAdotestDlg:OnInitDialog():CoInitialize(NULL); /初始化 OLE/COM 库环境 程序最后要调用 :CoUninitialize();/释放程序

7、占用的 COM 资源。另外: m_pRecordset-Close(); 注意!不要多次关闭!m_pConnection-Close();m_pRecordset = NULL;m_pConnection = NULL;2. 引入 ADO 库文件使用 ADO 前必须在工程的 stdafx.h 文件最后用直接引入符号import 引入 ADO 库文件,以使编译器能正确编译。代码如下:#import “C:Program Filescommon filessystemadomsado15.dll“ no_namespace rename(“EOF“,“adoEOF“)ADO 类的定义是作为一种资源

8、存储在 ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及 C使用的 COM vtable 接口。当使用import 指令时,在运行时 Visual C需要从ADO DLL 中读取这个类型库,并以此创建一组 C头文件。这些头文件具有.tli 和.tlh 扩展名,读者可以在项目的目录下找到这两个文件。在 C程序代码中调用的 ADO 类要在这些文件中定义。程序的第三行指示 ADO 对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与 ADO 中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rena

9、me_namespace(“AdoNS“)。第四行代码将 ADO 中的 EOF(文件结束)更名为 adoEOF,以避免与定义了自己的 EOF 的其他库冲突。3利用智能指针进行数据库操作在 CaboutDlg 头文件中定义两个 ADO 智能指针类实例,并在对话框中加入一个 ListCtrl。class CAdotestDlg : public CDialog_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;ClistCtrl m_List; .ADO 库包含三个智能指针:_ConnectionPtr、_CommandPtr 和_Rec

10、ordsetPtr。_ConnectionPtr 通常被用来创建一个数据连接或执行一条不返回任何结果的 SQL 语句,如一个存储过程。_CommandPtr 返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和 SQL 语句。在使用_CommandPtr 接口时,可以利用全局_ConnectionPtr 接口,也可以在_CommandPtr 接口里直接使用连接串。_RecordsetPtr 是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。在使用 ADO 程序的事件响应中 OnButton1 加入以下代码: void CAdotestD

11、lg:OnButton1() m_List.ResetContent();m_pConnection.CreateInstance(_uuidof(Connection); /初始化 Connection 指针m_pRecordset.CreateInstance(_uuidof(Recordset);/初始化 Recordset 指针trym_pConnection-Open(“DSN=ADOTest“,“,“,0); /连接叫作 ADOTest 的 ODBC 数据源/注意:这是连接不需要用户 ID 或密码的 open 函数/ 否则形式为 -Open(“DSN=test;uid=sa;pwd

12、=123;“,“,“,0);/ 执行 SQL 语句得到一个记录集把其指针赋值给 m_pRecordsetCString strSql=“select * from middle“;BSTR bstrSQL = strSql.AllocSysString(); m_pRecordset-Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); /adOpenDynamic:动态 adLockOptimistic 乐观封锁法 adCmdText:文本查询语句while(!m_pRecordse

13、t-adoEOF)/遍历所有记录 /取纪录字段值方式之一_variant_t TheValue; /VARIANT 数据类型TheValue = m_pRecordset-GetCollect(“BIG_NAME“);/得到字段 BIG_NAME 的值if(TheValue.vt!=VT_NULL)m_List.AddString(char*)_bstr_t(TheValue);/将该值加入到列表控件中/取纪录字段值方式之二/ _bstr_t TheValue1=m_pRecordset-Fields-GetItem(“BIG_NAME“)-Value;/ CString temp=TheVa

14、lue1.copy();/ m_List.AddString(temp);/数据类型转换_variant_t vUsername,vBirthday,vID,vOld;TRACE(“id:%d,姓名:%s,年龄:%d,生日:%srn“,vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);m_pRecordset-MoveNext();/转到下一条纪录m_pRecordset-Close();m_pConnection-Close();catch (_com_error e)/异常处理AfxMes

15、sageBox(e.ErrorMessage();m_pRecordset-Close(); /注意!不要多次关闭!否则会出错m_pConnection-Close();m_pRecordset = NULL;m_pConnection = NULL; 程序中通过_variant_t 和_bstr_t 转换 COM 对象和 C类型的数据, _variant_t 类封装了 OLE 自治VARIANT 数据类型。在 C+中使用_variant_t 类要比直接使用 VARIANT 数据类型容易得多。好,编译后该程序就能运行了,但记住运行前要创建一个叫 ADOTest 的 ODBC 数据源。该程序将把表middle 中的 BIG_NAME 字段值显示在列表控件中。4执行 SQL 命令并取得结果记录集为了取得结果记录集,我们定义一个指向 Recordset 对象的指针:_RecordsetPtr m_pRecordset;并为其创建 Recordset 对象的实例: m_pRecordset.CreateInstance(“ADODB.Recordset“);SQL 命令的执

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号