Microsoft OLE DB Provider for ODBC

目录

对于 ADO 或 RDS 的程序员来说,理想的环境是每个数据源都具有一个 OLE DB 接口,以便 ADO 可以直接调用该数据源。虽然越来越多数据库厂商提供 OLE DB 接口,但某些数据源仍无法以这种方式提供。然而,当前使用的所有 DBMS 系统实际上都可以通过 ODBC 进行访问。

Microsoft® ODBC Provider 允许 ADO 连接到任何 ODBC 的数据源。ODBC 驱动程序对于当今使用的各种主要 DBMS 都有效,包括 Microsoft® SQL Server®、Microsoft Access(Microsoft Jet 数据库引擎)和 Microsoft FoxPro® 以及诸如 Oracle 等非 Microsoft 数据库产品。提供者将不受线程控制并允许使用 unicode。

提供者将支持事务,尽管不同的 DBMS 引擎提供不同类型的事务支持。例如,Microsoft Access 支持五级或五级以下的嵌套事务。

该提供者是 ADO 的默认提供者,当与 Microsoft SQL Server 6.5 一起使用时,除 ADO 语言手册主题中注释之外,所有依赖于提供者的 ADO 属性和方法都受到支持。

连接字符串参数

要连接该提供者,将(ConnectionString 属性的参数)“Provider=”设置为:

MSDASQL

读取 Provider 属性也将返回该字符串。

由于这是 ADO 的默认提供者,所以如果省略连接字符串的 Provider= 参数,ADO 将试图建立与该提供者的连接。

除了 ADO 所定义的参数外,提供者不支持任何特定连接参数。但是,提供者将把任何非 ADO 连接参数传递给 ODBC 驱动程序管理器。

由于可以省略 Provider 参数,因此使用与撰写 ODBC 连接字符串时用的相同参数名(DRIVER=、DATABASE=、DSN= 等等)、值和语法,可以撰写与同一数据源的 ODBC 连接字符串相同的 ADO 连接字符串。可以使用或不使用预定义的数据源名 (DSN) 或 FileDSN 进行连接。

带有 DSN 或 FileDSN 的语法:

"[Provider=MSDASQL;] { DSN=name | FileDSN=filename } ; [DATABASE=database;] UID=user; PWD=password"

无 DSN(非 DSN 连接)的语法:

"[Provider=MSDASQL;] DRIVER=driver; SERVER=server; DATABASE=database; UID=user; PWD=password"

如果使用 DSNFileDSN,则必须通过“Windows 控制面板”中的“ODBC 管理器”进行定义。作为设置 DSN 的替换方法,可以指定 ODBC 的驱动程序 (DRIVER=),诸如“SQLServer”、服务器名 (SERVER=) 和数据库名 (DATABASE=)。

也可以在特定 ODBC 的参数或标准 ADO 定义的 User IDPassword 参数中为用户帐号 (PWD=) 指定用户帐号名 (UID=) 和密码。如果这些值中同时包括了 ADO 和特定 ODBC 的参数,则 ADO 参数优先。

即使 DSN 定义已经指定了数据库,也可以在 DSN 之外指定 DATABASE 参数以便连接到不同的数据库。这同时更改了 DSN 定义以包括指定的数据库。使用 DSN 时始终包括 DATABASE 参数是一种好办法。这样将保证能连接到正确的数据库,因为其他用户可能会在上一次检查 DSN 定义后更改默认的数据库参数。

Command 文本

如何使用 Command 对象很大程度上取决于数据源和它所接受的查询类型或命令语句。

ODBC 对于调用存储的过程提供特定的语法。对于 Command 对象的 CommandText 属性、Connection 对象上 Execute 方法的 CommandText 参数、或 Recordset 对象上 Open 方法的 Source 参数,请传递下列语法的字符串:

"{ [ ? = ] call procedure [ ( ? [, ? [ , _ ]] ) ] }"

此处每个 ? 引用 Parameters 集合中的一个对象。第一个 ? 引用 Parameters(0),下一个 ? 引用 Parameters(1),依次类推。

参数引用是可选的并取决于存储过程的结构。如果要调用未定义参数的存储过程,则字符串如下:

"{ call procedure }"

如果有两个查询参数,则字符串如下:

"{ call procedure ( ?, ? ) }"

如果存储过程要返回一个值,返回值将被作为另一个参数来对待。如果无查询参数而有返回值,则字符串如下:

"{ ? = call procedure }"

最后,如果有返回值和两个查询参数,则字符串如下:

"{ ? = call procedure ( ?, ? ) }"

Recordset 行为

下表列出了由该提供者打开的 Recordset 对象上可用的标准 ADO 方法和属性。

要获得有关提供者配置的 Recordset 行为的详细信息,请运行 Supports 方法并枚举 Recordset Properties 集合以确定特定提供者的动态属性是否存在。

标准 ADO Recordset 属性的可用性:

属性 仅向前 动态 键集 静态
AbsolutePage 不可用 不可用 读/写 读/写
AbsolutePosition 不可用 不可用 读/写 读/写
ActiveConnection 读/写 读/写 读/写 读/写
BOF 只读 只读 只读 只读
Bookmark 不可用 不可用 读/写 读/写
CacheSize 读/写 读/写 读/写 读/写
CursorLocation 读/写 读/写 读/写 读/写
CursorType 读/写 读/写 读/写 读/写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 读/写 读/写 读/写 读/写
LockType 读/写 读/写 读/写 读/写
MarshalOptions 读/写 读/写 读/写 读/写
MaxRecords 读/写 读/写 读/写 读/写
PageCount 不可用 不可用 只读 只读
PageSize 读/写 读/写 读/写 读/写
RecordCount 不可用 不可用 只读 只读
Source 读/写 读/写 读/写 读/写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读

当 ADO 与 ODBC 的 Microsoft OLE DB Provider 1.0 版本一起使用时,AbsolutePositionAbsolutePage 属性是只写的。

标准 ADO Recordset 方法的可用性:

方法 仅向前 动态 键集 静态
AddNew
Cancel
CancelBatch
CancelUpdate
Clone
Close
Delete
GetRows
Move
MoveFirst
MoveLast
MoveNext
MovePrevious
NextRecordset*
Open
Requery
Resync
Supports
Update
UpdateBatch

*不支持 Microsoft Access 数据库。

参阅   有关 ODBC 的 Microsoft OLE DB Provider 的详细实现资料和功能信息,请查阅 ODBC 的 Microsoft OLE DB Provider 文档和《Microsoft OLE DB 程序员手册》,可以在 Data Access SDK 中得到。也可查阅 http://www.microsoft.com/data 处的数据访问 Web 页。

www.holmesian.org