访问VBScriptVCScript等。
62 在VC中使用ADO 可以使用VC6提供的ActiveX控件开发应用程序还可以用ADO对象开发应用程序。
使用ADO对象开发应用程序可以使程序开发者更容易地控制对数据库的访问从而产生符合用户需求的数据库访问程序。
使用ADO对象开发应用程序也类似其它技术需产生与数据源的连接创建记录等步骤但与其它访问技术不同的是ADO技术对对象之间的层次和顺序关系要求不是太严格。
在程序开发过程中不必选建立连接然后才能产生记录对象等。
可以在使用记录的地方直接使用记录对象在创建记录对象的同时程序自动建立了与数据源的连接。
这种模型有力的简化了程序设计增强了程序的灵活性。
下面讲述使用ADO对象进行程序设计的方法。
621 引入ADO库文件 使用ADO前必须在工程的stdafx.h文件里用直接引入符号import引入ADO库文件以使编译器能正确编译。
代码如下所示 define INITGUID import quotc:program filescommon filessystemadomsado15.dllquot no_namespace renamequotEOFquotquotEndOfFilequot include quoticrsint.hquot 这行语句声明在工程中使用ADO但不使用ADO的名字空间并且为了避免冲突将EOF改名为EndOfFile。
622 初始化ADO环境 在使用ADO对象之前必须先初始化COM环境。
初始化COM环境可以用以下代码完成 ::CoInitializeNULL 在初始化COM环境后就可以使用ADO对象了如果在程序前面没有添加此代码将会产生COM错误。
在使用完ADO对象后需要用以下的代码将初始化的对象释放 ::CoUninitialize 此函数清除了为ADO对象准备的COM环境。
623 接口简介 ADO库包含三个基本接口: __ConnectionPtr接口、 __CommandPtr接口、 __RecordsetPtr接口 __ConnectionPtr接口返回一个记录集或一个空指针。
通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句如一个存储过程。
用__ConnectionPtr接口返回一个记录集不是一个好的使用方法。
通常同CDatabase一样使用它创建一个数据连接然后使用其它对象执行数据输入输出操作。
__CommandPtr接口返回一个记录集。
它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
在使用__CommandPtr接口时可以利用全局__ConnectionPtr接口也可以在__CommandPtr接口里直接使用连接串。
如果只执行一次或几次数据访问操作后者是比较好的选择。
但如果要频繁访问数据库并要返回很多记录集那么应该使用全局__ConnectionPtr接口创建一个数据连接然后使用__CommandPtr接口执行存储过程和SQL语句。
__RecordsetPtr是一个记录集对象。
与以上两种对象相比它对记录集提供了更多的控制功能如记录锁定游标控制等。
同__CommandPtr接口一样它不一定要使用一个已经创建的数据连接可以用一个连接串代替连接指针赋给__RecordsetPtr的connection成员变量让它自己创建数据连接。
如果要使用多个记录集最好的方法是同Command对象一样使用已经创建了数据连接的全局—ConnectionPtr接口然后使用__Recordse7tPtr执行存储过程和SQL语句。
6、24 使用ADO访问数据库 __ConnectionPtr是一个连接接口首先创建一个__ConnectionPtr接口实例接着指向并打开一个ODBC数据源或OLE DB数据提供者Provider。
以下代码分别创建一个基于DSN和非DSN的数据连接。
//使用__ConnectionPtr基于DSN __ConnectionPtr MyDb MyDb.CreateInstance__uuidofConnection MyDb〉OpenquotDSNsampUIDadminPWDadminquotquotquotquotquot1 //使用—ConnectionPtr 基于非DSN __ConnectionPtr MyDb MyDb.CreateInstance__uuidofConnection MyDb.OpenquotProviderSQLOLEDBSERVERserverDATABASEsampUIDadminPWDadminquotquotquotquotquot1 //使用__RecordsetPtr执行SQL语句 __RecordsetPtr MySet MySet.CreateInstance__uuidofRecordset MySet〉OpenquotSELECT FROM some__tablequot MyDb.GetInterfacePtradOpenDynamicadLockOptimisticadCmdText 现在我们已经有了一个数据连接和一个记录集接下来就可以使用数据了。
从以下代码可以看到使用ADO的__RecordsetPtr接口就不需要像DAO那样频繁地使用大而复杂的数据结构VARIANT并强制转换各种数据类型了这也是ADO的优点之一。
假定程序有一个名称为m__List的ListBox控件下面代码我们用__RecordsetPtr接口获取记录集数据并填充这个ListBox控件 __variant__t Holder trywhileMySet〉adoEOF Holder MySet〉GetCollectquotFIELD__1quot ifHolder.vtVT__NULL m__List.AddStringchar__bstr__tHolder MySet〉MoveNext catch__com__error e CString Error e〉ErrorMessage AfxMessageBoxe〉ErrorMessage catch... MessageBoxquotADO发生错误quot 必须始终在代码中用try和catch来捕获ADO错误否则ADO错误会使你的应用程序崩溃。
当ADO发生运行错误时如数据库不存在OLE DB数据提供者将自动创建一个__com__error对象并将有关错误信息填充到这个对象的成员变量。
625 类型转换 由于COM对象是跨平台的它使用了一种通用的方法来处理各种类型的数据因此CString 类和COM对象是不兼容的我们需要一组API来转换COM对象和C类型的数据。
__vatiant__t和__bstr__t就是这样两种对象。
它们提供了通用的方法转换COM对象和C类型的数据。
63 在
VB中使用ADO ADO 提供执行以下操作的方式 1、连接到数据源。
同时可确定对数据源的所有更改是否已成功或没有发生。
2、指定访问数据源的命令同时可带变量参数或优化执行。
3、执行命令。
3、如果这个命令使数据按表中的行的形式返回则将这些行存储在易于检查、操作或更改的缓存中。
4、适当情况下可使用缓存行的更改内容来更新数据源。
5、提供常规方法检测错误通常由建立连接或执行命令造成。
在典型情况下需要在编程模型中采用所有这些步骤。
但是由于 ADO 有很强的灵活性所以最后只需执行部分模块就能做一些有用的工作。
以下元素是 ADO 编程模型中的关键部分 631 连接 通过“连接”可从应用程序访问数据源连接是交换数据所必需的环境。
对象模型使用 Connection 对象使连接概念得以具体化。
“事务”用于界定在连接过程中发生的一系列数据访问操作的开始和结束。
ADO 可明确事务中的操作造成的对数据源的更改或者成功发生或者根本没有发生。
如果取消事务或它的一个操作失败则最终的结果将仿佛是事务中的操作均未发生数据源将会保持事务开始以前的状态。
对象模型无法清楚地体现出事务的概念而是用一组 Connection 对象方法来表示。
ADO 从 OLE DB 提供者访问数据和服务。
Connection 对象用于指定专门的提供者和任意参数。
632 命令 通过已建立的连接发出的“命令”可以某种方式来操作数据源。
一般情况下命令可以在数据源中添加、删除或更新数据或者在表中以行的格式检索数据。
对象模型用 Command 对象来体现命令概念。
使用 Command 对象可使 ADO 优化命令的执行。
参数 通常命令需要的变量部分即“参数”可以在命令发布之前进行更改。
例如可重复发出相同的数据检索命令但每一次均可更改指定的检索信息。
参数对与函数活动相同的可执行命令非常有用这样就可知道命令是做什么的但不必知道它如何工作。
例如可发出一项银行过户命令从一方借出贷给另一方。
可将要过户的款额设置为参数。
对象模型用 Parameter 对象来体现参数概念。
633 记录集 如果命令是在表中按信息行返回数据的查询行返回查询则这些行将会存储在本地。
对象模型将该存储体现为 Recordset 对象。
但是不存在仅代表单独一个 Recordset 行的对象。
记录集是在行中检查和修改数据最主要的方法。
634 字段 一个记录集行包含一个或多个“字段”。
如果将记录集看作二维网格字段将排列构成“列”。
每一字段列都分别包含有名称、数据类型和值的属性正是在该值中包含了来自数据源的真实数据。
对象模型以 Field 对象体现字段。
要修改数据源中的数据可在记录集行中修改 Field 对象的值对记录集的更改最终被传送给数据源。
作为选项Connection 对象的事务管理方法能够可靠地保证更改要么全部成功要么全部失败。
635 错误 错误随时可在应用程序中发生通常是由于无法建立连接、执行命令或对某些状态例如试图使用没有初始化的记录集的对象进行操作。
对象模型以 Error 对象体现错误。
任意给定的错误都会产生一个或多个 Error 对象随后产生的错误将会放弃先前的 Error 对象组。
636 属性 每个 ADO 对象都有一组唯一的“属性”来描述或控制对象的行为。
属性有内置和动态两种类型。
内置属性是 ADO 对象的一部分并且随时可用。
动态属性则由特别的数据提供者添加到 ADO 对象的属性集合中仅在提供者被使用时才能存在。
对象模型以 Property 对象体现属性。
637 集合 ADO 提供“集合”这是一种可方便地包含其他特殊类型对象的对象类型。
使用集合方法可按名称文本字符串或序号整型数对集合中的对象进行检索。
ADO 提供四种类型的集合 Connection 对象具有 Errors 集合包含为响应与数据源有关的单一错误而创建的所有 Error 对象。
Command 对象具有 Parameters 集合包含应用于 Command 对象的所有 Parameter 对象。
Recordset 对象具有 Fields 集合包含所有定义 Recordset 对象列的 Field 对象。
此外Connection、Command、Recordset 和 Field 对象都具有 Properties 集合。
它包含所有属于各个包含对象的 Property 对象。
ADO 对象拥有可在其上使用的诸如“整型”、“字符型”或“布尔型”这样的普通数据类型来设置或检索值的属性。
然而有必要将某些属性看成是数据类型“COLLECTION OBJECT”的返回值。
相应的集合对象具有存储和检索适合该集合的其他对象的方法。
638 事件 ADO 2.0 支持事件事件是对某些操作将要或已经发生的通知。
有两类事件ConnectionEvent 和 RecordsetEvent。
Connection 对象产生 ConnectionEvent 事件而 Recordset 对象则产生 RecordsetEvent 事件。
事件由事件处理程序例程处理该例程在某个操作开始之前或结束之后被调用。
某些事件是成对出现的。
开始操作前调用的事件名格式为 WillEventWill 事件而操作结束后调用的事件名格式为 EventCompleteComplete 事件。
其余的不成对事件只在操作结束后发生。
其名称没有任何固定模式。
事件处理程序由状态参数控制。
附加信息由错误和对象参数提供。
可以请求事件处理程序不接受第一次通知以后的任何通知。
例如可以选择只接收 Will 事件或 Complete 事件。
下面的代码显示了一个使用ADO的例子。
首先加入Microsoft ActiveX Data Object 2.0 Library引用。
Dim db As Connection Set db New Connection db.CursorLocation adUseClient db.Open quotPROVIDERMSDASQLDSNTestDatabasequot quotsaquot quotquot -1 Dim i As Long Dim id As Long Dim value As Single Dim rst As New Recordset Set rst New Recordset rst.Open quotselect from 模拟量变化历史表quot db adOpenDynamic adLockOptimistic rst.MoveFirst For i 0 To rst.RecordCount - 1 id rst.FieldsquotIDquot valuerst.Fields“VALUE” rst.MoveNext Next i rst.Close Set rst Nothing db.Close 64总结 ADO技术是访问数据库的新技术具有易于使用、访问灵活、应用广泛的特点。
用ADO访问数据源的特点可总结如下 易于使用 这是ADO技术的最重要的一个特征。
由于ADO是高层应用所以相对于OLE DB或者ODBC来说它具有面向对象的特性。
同时在ADO的对象结构中其对象之间的层次关系并不明显。
相对于DAO等访问技术来讲又不必关心对象的构造顺序和构造层次。
对于要用的对象不必选建立连接、会话等对象只需直接构造即可方便了应用程序的编制。
高速访问数据源 由于ADO技术基于OLE DB所以它也继承了OLE DB访问数据库的高速性。
可以访问不同数据源 ADO技术可以访问包括关系数据库和非关系数据库的所有文件系统。
此特点使应用程序有很多的灵活性和通用性。
可以用于Microsoft ActiveX页 ADO技术可以以ActiveX控件的形式出现所以可以被用于Microsoft ActiveX页此特征可简化WEB页的编程。
程序占用内存少 由于ADO是基于组件对象模型COM的访问技术所以用ADO产生的应用程序占用内存少。
7、总结 要在访问数据时判断出应该使用哪一种技术这并不容易。
可能需要公.
上一篇:
Java2程序设计基础第7章_创建JApplet网页小程序
下一篇:
秋天是疼痛的