按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
o Value 属性是包含属性设置的变体型;
o Attributes 属性是指示特定于提供者属性特征的长整型值。
4 .错误对象
Error 对象用于获得连接对象所发生的详细错误信息,它的主要属性如表 12…12 所示。
表 12…12 错误对象的属性及其说明
属性 说明
Description 获得错误的简要说明
NativeError 获得对特殊的 Error 对象检索特定数据库的错误信息
Number 确定发生错误的类型,该属性的值是与错误条件对应的惟一数字
Source 确定产生错误的原始对象或应用程序的名称,该名称可以是对象的类名或编程 ID
SQLState 读取由提供者在处理 SQL 语句过程中出现错误时返回的 5 个字符的错误代码
12。5。5 集合
ADO 有 4 个集合,分别是域集合 Fields 、参数集合 Parameters 、属性集合 Properties 以及
错误集合 Errors 。
1.域集合
Fields 集合包含 Recordset 对象的所有 Field 对象,它的常用方法和属性分别如表 12…13
和表 12…14 所示。
表 12…13 域集合的方法及其说明
方法 说明
Append 添加新的 Field 对象到 Fields 集合中
Delete 从 Fields 集合中删除 Field 对象
Refresh 更新 Fields 集合中的 Field 对象
Item 返回 Fields 集合中的 Field 对象
表 12…14 域集合的属性及其说明
属性 说明
Count 确定给定 Fields 集合中 Field 对象的数目
2 .参数集合
Parameters 集合包含 mand 对象的所有 Parameter 对象,它的常用方法和属性分别如
表 12…15 和表 12…16 所示。
·349 ·
…………………………………………………………Page 361……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
表 12…15 参数集合的方法及其说明
方法 说明
Append 添加新的 Parameter 对象到 Parameters 集合中
Delete 从 Parameters 集合中删除 Parameter 对象
Refresh 更新 Parameters 集合中的 Parameter 对象
Item 返回 Parameters 集合中的 Parameter 对象
表 12…16 参数集合的属性及其说明
属性 说明
Count 确定给定 Parameters 集合中 Parameter 对象的数目
3 .属性集合
Properties 集合包含特定对象实例的所有 Property 对象,它的常用方法和属性分别如表
12…17 和表 12…18 所示。
表 12…17 属性集合的方法及其说明
方法 说明
Refresh 更新 Properties 集合中的 Property 对象
Item 返回 Properties 集合中的 Property 对象
表 12…18 属性集合的属性及其说明
属性 说明
Count 确定给定 Properties 集合中 Property 对象的数目
4 .错误集合
Errors 集合包含为响应涉及提供者的单个错误而创建的所有 Error 对象,它的常用方法和
属性分别如表 12…19 和表 12…20 所示。
表 12…19 错误集合的方法及其说明
方法 说明
清空 Errors 集合中的全部 Error 对象,发生错误时,ADO 会自动清空 Errors 集合,
Clear
并用新的 Error 对象填充 Errors 集合
Item 返回 Errors 集合中的 Error 对象
表 12…20 错误集合的属性及其说明
属性 属性
Count 确定给定 Errors 集合中 Error 对象的数目
12。6 数据库操作
本节将给出一个具体的利用 ADO 技术操作数据库的实例,通过这个实例,读者对 ADO
技术会有更进一步的了解。
·350 ·
…………………………………………………………Page 362……………………………………………………………
第 12 章 数据库开发
12。6。1 动态链接库的引入和 OLE/ 库的初始化
利用 ADO 技术编写程序,首先要告诉编译器去什么地方找 ADO 的库文件,通常这个文
件在 c:program filesmon filessystemado 下,文件名为 msado15。dll 。因此,第一步应该
在文件“stdafx。h ”的开头加上如下语句:
#import 〃c:program filesmon filessystemadomsado15。dll〃 no_namespace rename(〃EOF〃; 〃adoEOF〃)
使用 no_namespace 意味着程序员不需要在初始化变量的时候引用名字空间,最后的操作
表明将 EOF 更名为 adoEOF,如果不这样做,在程序中很可能会碰到常量冲突。
将 ADO 的动态链接库引入后,在正式用 ADO 编写程序前,还需要对 OLE/ 库初始
化,代码如下:
CoInitialize( NULL );
12。6。2 ADO 与数据库的连接
引入 ADO 库并初始化 OLE/ 后,接下来要进行 ADO 与数据库的连接。
ADO 与数据库连接时,有一个最重要的数据类型,即_ConnectionPtr ,它实际上就是由
类模板__ptr_t 而得到的一个具体的实例类。_ConnectionPtr 类封装了 Connection 对象的
Idispatch 接口指针,及一些必要的操作,通过这个指针便可以操纵 Connection 对象。通常的
连接实现方式如下:
_ConnectionPtr conn;
conn。CreateInstance(__uuidof(Connection));
conn…》Open(BSTR ConnectionString; BSTR UserID; BSTR Password; long Options);
各参数意义如下:
o ConnectionString :最关键的参数,它表明了要连接的数据源,在本章中采用的是 Access
数据库,它的格式一般为: 〃Provider=Microsoft。Jet。OLEDB。4。0;Data Source=db。mdb〃,
至于其他数据库,请读者参考相关资料;此外,ConnectionString 还可以是数据源的名
字。
o UserID :用户名,如果 ConnectionString 中已经包含,则可以为空。
o Password :密码,如果 ConnectionString 中已经包含,则可以为空。
o Options :表示是以同步方式(adConnectUnspecified)还是以异步方式(adAsyncConnect)
进行连接,默认为同步。
具体的,有以下两种实现连接的方式:
(1)LPCSTR strConnect = 〃Provider=Microsoft。Jet。OLEDB。4。0;Data Source=test。mdb〃;
conn…》Open(strConnect; 〃〃; 〃〃; adConnectUnspecified);
(2 )conn…》Open(〃DSN=DataSourceName〃; 〃〃; 〃〃; adConnectUnspecified);
对于本章的例子,要连接的数据库就是在第 2 节创建的数据库 Info。mdb (数据源也在第
2 节已经设置好),则连接语句如下:
_ConnectionPtr m_connection;
//创建实例
m_connection。CreateInstance(__uuidof(Connection) );
·351 ·
…………………………………………………………Page 363……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
//根据连接字符串开启数据连接
m_connection…》Open( 〃DSN=Information〃; 〃〃; 〃〃; …1);
12。6。3 获得和遍历记录集
建立连接后,便可以创建一个 ADO 记录集。在得到记录集之前,需要先声明一个
_RecordsetPtr 型变量,然后创建记录集的实例:
_Recordset m_Recordset;
//创建实例
m_Recordset。CreateInstance(__uuidof(Recordset));
这里_RecordsetPtr 的来历类似于_ConnectionPtr ,也是由类模板__ptr_t 而得到的一个
具体的实例类。
一般说来,打开记录集有 3 种方式。
1.利用 Connection 对象的 Execute()方法执行 SQL 命令
Execute()方法的原型如下:
Execute (_bstr_t mandText; VARIANT* RecordsAffected; long Options)
各参数意义如下:
o mandText :命令字串,通常是 SQL 语句。
o RecordsAffected :操作完成后影响的行数。
o Options :mandText 中内容的类型。取值为 adCmdText 表明是文本命令;取值为
adCmdTable 表明是一个表名;取值为 adCmdProc 表明是一个存储过程。
假设 m_Connection 和 m_Recordset 分别是创建好的连接对象和记录集对象,则利用
Connection 对象的 Execute()方法打开记录集代码如下:
_variant RecordsAffected;
m_Connection…》Execute(“select * from Contact”; &RecordsAffected; adCmdText);
2 .利用 mand 对象执行