Microsoft OLE DB Provider for ODBC 概述

对于 ADO 或 RDS 程序员,理想的世界是每个数据源都具有一个 OLE DB 接口,这样 ADO 就可以直接调用数据源。 尽管越来越多的数据库供应商正在实现 OLE DB 接口,但一些数据源尚未以这种方式公开。 但是,目前使用的大多数 DBMS 系统都可以通过 ODBC 访问。

ODBC 驱动程序适用于目前使用的每个主要 DBMS,包括 Microsoft SQL Server、Microsoft Access(Microsoft Jet 数据库引擎)和 Microsoft FoxPro,以及非 Microsoft 数据库产品(如 Oracle)。

但是,Microsoft ODBC 提供程序允许 ADO 连接到任何 ODBC 数据源。 提供程序不受线程控制并允许使用 Unicode。

提供程序支持事务,尽管不同的 DBMS 引擎提供不同类型的事务支持。 例如,Microsoft Access 支持多达 5 级的嵌套事务。

这是 ADO 的默认提供程序,支持所有依赖于提供程序的 ADO 属性和方法。

连接字符串参数

若要连接到此提供程序,请将 ConnectionString 属性的 Provider= 自变量设置为:

MSDASQL

读取 Provider 属性也会返回此字符串。

典型的连接字符串

此提供程序的典型连接字符串:

"Provider=MSDASQL;DSN=dsnName;UID=MyUserID;PWD=<password>;"

该字符串由以下关键字组成:

关键字 说明
提供程序 指定用于 ODBC 的 OLE DB 提供程序。
DSN 指定数据源名称。
UID 指定用户名。
PWD 指定用户密码。
URL 指定在 Web 文件夹中发布的文件或目录的 URL。

由于这是 ADO 的默认提供程序,因此如果从连接字符串中省略 Provider= 参数,ADO 将尝试建立与此提供程序的连接。

注意

如果要连接到支持 Windows 身份验证的数据源提供程序,则应指定 Trusted_Connection=yes 或 Integrated Security = SSPI,而不是连接字符串中的用户 ID 和密码信息

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

由于可以省略 Provider 参数,因此对于同一个数据源,可以编写与 ODBC 连接字符串相同的 ADO 连接字符串。 可以使用与编写 ODBC 连接字符串时使用的相同参数名(DRIVER=、DATABASE=、DSN= 等)、值和语法。 在进行连接时,可以使用预定义的数据源名称 (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=MyUserID; PWD=<password>"

注解

如果使用 DSN 或 FileDSN,则必须通过 Windows 控制面板中的“ODBC 数据源管理员”进行定义。 在 Microsoft Windows 2000 中,“ODBC 管理员”位于“管理工具”下。 在早期版本的 Windows 中,“ODBC 管理员”图标的名称为“32 位 ODBC”或只是“ODBC”。

设置 DSN 的另一种方法是,指定 ODBC 驱动程序 (DRIVER=)(例如“SQL Server;”)、服务器名称 (SERVER=) 和数据库名称 (DATABASE=)。

还可以在 ODBC 特有的参数或 ADO 定义的标准 user 和 password 参数中指定用户帐户名称 (UID=) 和用户帐户的密码 (PWD=)。

尽管 DSN 定义已经指定了数据库,仍然可以指定除 DSN 之外的 database 参数,以便连接到不同的数据库。 最好在使用 DSN 时始终包含 database 参数。 这可以确保在你上次检查 DSN 定义后,如果其他用户更改了默认数据库参数,你还能够连接到正确的数据库。

提供程序特有的连接属性

OLE DB Provider for ODBC 将多个属性添加到 Connection 对象的 Properties 集合。 下表列出了这些属性以及对应的 OLE DB 属性名(位于括号内)。

属性名称 说明
Accessible Procedures (KAGPROP_ACCESSIBLEPROCEDURES) 指示用户是否具有访问存储过程的权限。
Accessible Tables (KAGPROP_ACCESSIBLETABLES) 指示用户是否具有对数据库表执行 SELECT 语句的权限。
Active Statements (KAGPROP_ACTIVESTATEMENTS) 指示 ODBC 驱动程序可以在一个连接上所能支持的句柄数。
Driver Name (KAGPROP_DRIVERNAME) 指示 ODBC 驱动程序的文件名。
Driver ODBC Version (KAGPROP_DRIVERODBCVER) 指示此驱动程序支持的 ODBC 版本。
File Usage (KAGPROP_FILEUSAGE) 指示驱动程序如何处理数据源中的文件(作为表还是作为目录)。
Like Escape Clause (KAGPROP_LIKEESCAPECLAUSE) 指示驱动程序是否支持在 WHERE 子句的 LIKE 谓词中定义和使用百分比字符 (%) 和下划线字符 (_) 的转义字符。
Max Columns in Group By (KAGPROP_MAXCOLUMNSINGROUPBY) 指示 SELECT 语句的 GROUP BY 子句中可以列出的最大列数。
Max Columns in Index (KAGPROP_MAXCOLUMNSININDEX) 指示索引中可以包含的最大列数。
Max Columns in Order By (KAGPROP_MAXCOLUMNSINORDERBY) 指示 SELECT 语句的 ORDER BY 子句中可以列出的最大列数。
Max Columns in Select (KAGPROP_MAXCOLUMNSINSELECT) 指示 SELECT 语句的 SELECT 部分中可以列出的最大列数。
Max Columns in Table (KAGPROP_MAXCOLUMNSINTABLE) 指示表中允许的最大列数。
Numeric Functions (KAGPROP_NUMERICFUNCTIONS) 指示 ODBC 驱动程序支持哪些数值函数。 有关此位掩码中使用的函数名称和关联值的列表,请参阅 ODBC 文档中的附录 E:标量函数
Outer Join Capabilities (KAGPROP_OJCAPABILITY) 指示提供程序支持的外部联接类型。
Outer Joins (KAGPROP_OUTERJOINS) 指示提供程序是否支持外部联接。
Special Characters (KAGPROP_SPECIALCHARACTERS) 指示哪些字符对 ODBC 驱动程序具有特殊意义。
Stored Procedures (KAGPROP_PROCEDURES) 指示存储过程是否可用于此 ODBC 驱动程序。
String Functions (KAGPROP_STRINGFUNCTIONS) 指示 ODBC 驱动程序支持哪些字符串函数。 有关此位掩码中使用的函数名称和关联值的列表,请参阅 ODBC 文档中的附录 E:标量函数
System Functions (KAGPROP_SYSTEMFUNCTIONS) 指示 ODBC 驱动程序支持哪些系统函数。 有关此位掩码中使用的函数名称和关联值的列表,请参阅 ODBC 文档中的附录 E:标量函数
Time/Date Functions (KAGPROP_TIMEDATEFUNCTIONS) 指示 ODBC 驱动程序支持哪些时间和日期函数。 有关此位掩码中使用的函数名称和关联值的列表,请参阅 ODBC 文档中的附录 E:标量函数
SQL Grammar Support (KAGPROP_ODBCSQLCONFORMANCE) 指示 ODBC 驱动程序支持的 SQL 语法。

特定于提供程序的 Recordset 和 Command 属性

OLE DB Provider for ODBC 将多个属性添加到 Recordset 和 Command 对象的 Properties 集合。 下表列出了这些属性以及对应的 OLE DB 属性名(位于括号内)。

属性名称 说明
Query Based Updates/Deletes/Inserts (KAGPROP_QUERYBASEDUPDATES) 指示是否可以使用 SQL 查询执行更新、删除和插入。
ODBC Concurrency Type (KAGPROP_CONCURRENCY) 指示用于减少两个用户试图同时从数据源访问同一数据所导致的潜在问题的方法。
BLOB accessibility on Forward-Only cursor (KAGPROP_BLOBSONFOCURSOR) 指示在使用仅向前游标时是否可以访问 BLOB 字段
Include SQL_FLOAT, SQL_DOUBLE, and SQL_REAL in QBU WHERE clauses (KAGPROP_INCLUDENONEXACT) 指示是否可以在 QBU WHERE 子句中包含 SQL_FLOAT、SQL_DOUBLE 和 SQL_REAL 值。
Position on the last row after insert (KAGPROP_POSITIONONNEWROW) 指示在表中插入新记录后,表中的最后一行将是当前行。
IRowsetChangeExtInfo (KAGPROP_IROWSETCHANGEEXTINFO) 指示 IRowsetChange 接口是否提供扩展信息支持。
ODBC Cursor Type (KAGPROP_CURSOR) 指示 Recordset 对象使用的游标类型
Generate a Rowset that can be marshaled (KAGPROP_MARSHALLABLE) 指示 ODBC 驱动程序生成可封送的记录集

命令文本

如何使用 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 的属性集合以确定是否存在提供程序特定的动态属性

标准 ADO Recordset 属性的可用性:

properties 仅向前 动态 Keyset 静态
AbsolutePage 不可用 不可用 读/写 读/写
AbsolutePosition 不可用 不可用 读/写 读/写
ActiveConnection 读/写 读/写 读/写 读/写
BOF (只读) (只读) (只读) (只读)
书签 不可用 不可用 读/写 读/写
CacheSize 读/写 读/写 读/写 读/写
CursorLocation 读/写 读/写 读/写 读/写
CursorType 读/写 读/写 读/写 读/写
EditMode (只读) (只读) (只读) (只读)
Filter 读/写 读/写 读/写 读/写
LockType 读/写 读/写 读/写 读/写
MarshalOptions 读/写 读/写 读/写 读/写
MaxRecords 读/写 读/写 读/写 读/写
PageCount 读/写 不可用 (只读) (只读)
PageSize 读/写 读/写 读/写 读/写
RecordCount 读/写 不可用 (只读) (只读)
Source 读/写 读/写 读/写 读/写
State (只读) (只读) (只读) (只读)
Status (只读) (只读) (只读) (只读)

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

标准 ADO Recordset 方法的可用性:

方法 仅向前 动态 Keyset 静态
AddNew
Cancel
CancelBatch
CancelUpdate
克隆 No
Close
删除
GetRows
移动
MoveFirst
MoveFirst
MoveNext
MovePrevious
NextRecordset*
打开
Requery
Resync No
支持
更新
UpdateBatch

*Microsoft Access 数据库不支持此方法。

动态属性

Microsoft OLE DB Provider for ODBC 将多个动态属性插入到未打开的 ConnectionRecordsetCommand 对象的 Properties 集合中。

下表是每种动态属性的 ADO 和 OLE DB 名称的交叉索引。 OLE DB 程序员参考通过术语“说明”来引用 ADO 属性名。可以在 OLE DB 程序员参考中找到有关这些属性的详细信息。 在索引中搜索 OLE DB 属性名称,或参阅附录 C:OLE DB 属性

连接动态属性

以下属性会添加到 Connection 对象的 Properties 集合中。

ADO 属性名称 OLE DB 属性名称
活动会话 DBPROP_ACTIVESESSIONS
异步中止 DBPROP_ASYNCTXNABORT
异步提交 DBPROP_ASYNCTNXCOMMIT
自动提交隔离级别 DBPROP_SESS_AUTOCOMMITISOLEVELS
目录位置 DBPROP_CATALOGLOCATION
目录术语 DBPROP_CATALOGTERM
列定义 DBPROP_COLUMNDEFINITION
Connect Timeout DBPROP_INIT_TIMEOUT
当前目录 DBPROP_CURRENTCATALOG
数据源 DBPROP_INIT_DATASOURCE
数据源名称 DBPROP_DATASOURCENAME
数据源对象线程模型 DBPROP_DSOTHREADMODEL
DBMS 名称 DBPROP_DBMSNAME
DBMS 版本 DBPROP_DBMSVER
扩展属性 DBPROP_INIT_PROVIDERSTRING
GROUP BY 支持 DBPROP_GROUPBY
异类表支持 DBPROP_HETEROGENEOUSTABLES
标识符区分大小写 DBPROP_IDENTIFIERCASE
初始目录 DBPROP_INIT_CATALOG
隔离级别 DBPROP_SUPPORTEDTXNISOLEVELS
隔离保留期 DBPROP_SUPPORTEDTXNISORETAIN
区域设置标识符 DBPROP_INIT_LCID
位置 DBPROP_INIT_LOCATION
最大索引大小 DBPROP_MAXINDEXSIZE
最大行大小 DBPROP_MAXROWSIZE
最大行大小包括 BLOB DBPROP_MAXROWSIZEINCLUDESBLOB
SELECT 中的最大表数 DBPROP_MAXTABLESINSELECT
模式 DBPROP_INIT_MODE
多个参数集 DBPROP_MULTIPLEPARAMSETS
多个结果 DBPROP_MULTIPLERESULTS
多种存储选项 DBPROP_MULTIPLESTORAGEOBJECTS
多表更新 DBPROP_MULTITABLEUPDATE
NULL 排序规则顺序 DBPROP_NULLCOLLATION
NULL 串联行为 DBPROP_CONCATNULLBEHAVIOR
OLE DB 服务 DBPROP_INIT_OLEDBSERVICES
OLE DB 版本 DBPROP_PROVIDEROLEDBVER
OLE 对象支持 DBPROP_OLEOBJECTS
打开行集支持 DBPROP_OPENROWSETSUPPORT
Select 列表中的 ORDER BY 列 DBPROP_ORDERBYCOLUMNSINSELECT
输出参数可用性 DBPROP_OUTPUTPARAMETERAVAILABILITY
密码 DBPROP_AUTH_PASSWORD
通过 Ref 访问器传递 DBPROP_BYREFACCESSORS
Persist Security Info DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO
持久性 ID 类型 DBPROP_PERSISTENTIDTYPE
准备中止行为 DBPROP_PREPAREABORTBEHAVIOR
准备提交行为 DBPROP_PREPARECOMMITBEHAVIOR
过程术语 DBPROP_PROCEDURETERM
提示 DBPROP_INIT_PROMPT
提供程序友好名称 DBPROP_PROVIDERFRIENDLYNAME
提供者名称 DBPROP_PROVIDERFILENAME
提供程序版本 DBPROP_PROVIDERVER
只读数据源 DBPROP_DATASOURCEREADONLY
命令上的行集转换 DBPROP_ROWSETCONVERSIONSONCOMMAND
架构术语 DBPROP_SCHEMATERM
架构用法 DBPROP_SCHEMAUSAGE
SQL 支持 DBPROP_SQLSUPPORT
结构化存储 DBPROP_STRUCTUREDSTORAGE
子查询支持 DBPROP_SUBQUERIES
表术语 DBPROP_TABLETERM
事务 DDL DBPROP_SUPPORTEDTXNDDL
用户 ID DBPROP_AUTH_USERID
用户名 DBPROP_USERNAME
窗口句柄 DBPROP_INIT_HWND

记录集动态属性

以下属性会添加到 Recordset 对象的 Properties 集合中。

ADO 属性名称 OLE DB 属性名称
访问顺序 DBPROP_ACCESSORDER
阻止存储对象 DBPROP_BLOCKINGSTORAGEOBJECTS
书签类型 DBPROP_BOOKMARKTYPE
可对其添加书签 DBPROP_IROWSETLOCATE
更改插入的行 DBPROP_CHANGEINSERTEDROWS
列特权 DBPROP_COLUMNRESTRICT
列集通知 DBPROP_NOTIFYCOLUMNSET
延迟存储对象更新 DBPROP_DELAYSTORAGEOBJECTS
向后提取 DBPROP_CANFETCHBACKWARDS
保留行 DBPROP_CANHOLDROWS
IAccessor DBPROP_IAccessor
IColumnsInfo DBPROP_IColumnsInfo
IColumnsRowset DBPROP_IColumnsRowset
IConnectionPointContainer DBPROP_IConnectionPointContainer
IConvertType DBPROP_IConvertType
固定行 DBPROP_IMMOBILEROWS
IRowset DBPROP_IRowset
IRowsetChange DBPROP_IRowsetChange
IRowsetIdentity DBPROP_IRowsetIdentity
IRowsetInfo DBPROP_IRowsetInfo
IRowsetLocate DBPROP_IRowsetLocate
IRowsetResynch
IRowsetUpdate DBPROP_IRowsetUpdate
ISequentialStream DBPROP_ISequentialStream
ISupportErrorInfo DBPROP_ISupportErrorInfo
文本书签 DBPROP_LITERALBOOKMARKS
文本行标识 DBPROP_LITERALIDENTITY
最大打开行数 DBPROP_MAXOPENROWS
最大挂起行数 DBPROP_MAXPENDINGROWS
最大行数 DBPROP_MAXROWS
通知粒度 DBPROP_NOTIFICATIONGRANULARITY
通知阶段 DBPROP_NOTIFICATIONPHASES
对象事务处理 DBPROP_TRANSACTEDOBJECT
自己的更改可见 DBPROP_OWNUPDATEDELETE
自己的插入可见 DBPROP_OWNINSERT
在中止时保留 DBPROP_ABORTPRESERVE
在提交时保留 DBPROP_COMMITPRESERVE
快速重启 DBPROP_QUICKRESTART
可重入事件 DBPROP_REENTRANTEVENTS
删除已删除的行 DBPROP_REMOVEDELETED
报告多个更改 DBPROP_REPORTMULTIPLECHANGES
返回挂起的插入 DBPROP_RETURNPENDINGINSERTS
行删除通知 DBPROP_NOTIFYROWDELETE
行第一个更改通知 DBPROP_NOTIFYROWFIRSTCHANGE
行插入通知 DBPROP_NOTIFYROWINSERT
行特权 DBPROP_ROWRESTRICT
行重新同步通知 DBPROP_NOTIFYROWRESYNCH
行线程处理模型 DBPROP_ROWTHREADMODEL
行撤消更改通知 DBPROP_NOTIFYROWUNDOCHANGE
行撤消删除通知 DBPROP_NOTIFYROWUNDODELETE
行撤消插入通知 DBPROP_NOTIFYROWUNDOINSERT
行更新通知 DBPROP_NOTIFYROWUPDATE
行集提取位置更改通知 DBPROP_NOTIFYROWSETFETCHPOSISIONCHANGE
行集发布通知 DBPROP_NOTIFYROWSETRELEASE
向后滚动 DBPROP_CANSCROLLBACKWARDS
跳过已删除的书签 DBPROP_BOOKMARKSKIPPED
强行标识 DBPROP_STRONGITDENTITY
唯一行 DBPROP_UNIQUEROWS
可更新性 DBPROP_UPDATABILITY
使用书签 DBPROP_BOOKMARKS

Command 动态属性

以下属性会添加到 Command 对象的 Properties 集合中

ADO 属性名称 OLE DB 属性名称
访问顺序 DBPROP_ACCESSORDER
阻止存储对象 DBPROP_BLOCKINGSTORAGEOBJECTS
书签类型 DBPROP_BOOKMARKTYPE
可对其添加书签 DBPROP_IROWSETLOCATE
更改插入的行 DBPROP_CHANGEINSERTEDROWS
列特权 DBPROP_COLUMNRESTRICT
列集通知 DBPROP_NOTIFYCOLUMNSET
延迟存储对象更新 DBPROP_DELAYSTORAGEOBJECTS
向后提取 DBPROP_CANFETCHBACKWARDS
保留行 DBPROP_CANHOLDROWS
IAccessor DBPROP_IAccessor
IColumnsInfo DBPROP_IColumnsInfo
IColumnsRowset DBPROP_IColumnsRowset
IConnectionPointContainer DBPROP_IConnectionPointContainer
IConvertType DBPROP_IConvertType
固定行 DBPROP_IMMOBILEROWS
IRowset DBPROP_IRowset
IRowsetChange DBPROP_IRowsetChange
IRowsetIdentity DBPROP_IRowsetIdentity
IRowsetInfo DBPROP_IRowsetInfo
IRowsetLocate DBPROP_IRowsetLocate
IRowsetResynch
IRowsetUpdate DBPROP_IRowsetUpdate
ISequentialStream DBPROP_ISequentialStream
ISupportErrorInfo DBPROP_ISupportErrorInfo
文本书签 DBPROP_LITERALBOOKMARKS
文本行标识 DBPROP_LITERALIDENTITY
最大打开行数 DBPROP_MAXOPENROWS
最大挂起行数 DBPROP_MAXPENDINGROWS
最大行数 DBPROP_MAXROWS
通知粒度 DBPROP_NOTIFICATIONGRANULARITY
通知阶段 DBPROP_NOTIFICATIONPHASES
对象事务处理 DBPROP_TRANSACTEDOBJECT
自己的更改可见 DBPROP_OWNUPDATEDELETE
自己的插入可见 DBPROP_OWNINSERT
在中止时保留 DBPROP_ABORTPRESERVE
在提交时保留 DBPROP_COMMITPRESERVE
快速重启 DBPROP_QUICKRESTART
可重入事件 DBPROP_REENTRANTEVENTS
删除已删除的行 DBPROP_REMOVEDELETED
报告多个更改 DBPROP_REPORTMULTIPLECHANGES
返回挂起的插入 DBPROP_RETURNPENDINGINSERTS
行删除通知 DBPROP_NOTIFYROWDELETE
行第一个更改通知 DBPROP_NOTIFYROWFIRSTCHANGE
行插入通知 DBPROP_NOTIFYROWINSERT
行特权 DBPROP_ROWRESTRICT
行重新同步通知 DBPROP_NOTIFYROWRESYNCH
行线程处理模型 DBPROP_ROWTHREADMODEL
行撤消更改通知 DBPROP_NOTIFYROWUNDOCHANGE
行撤消删除通知 DBPROP_NOTIFYROWUNDODELETE
行撤消插入通知 DBPROP_NOTIFYROWUNDOINSERT
行更新通知 DBPROP_NOTIFYROWUPDATE
行集提取位置更改通知 DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE
行集发布通知 DBPROP_NOTIFYROWSETRELEASE
向后滚动 DBPROP_CANSCROLLBACKWARDS
跳过已删除的书签 DBPROP_BOOKMARKSKIP
强行标识 DBPROP_STRONGIDENTITY
可更新性 DBPROP_UPDATABILITY
使用书签 DBPROP_BOOKMARKS

有关 Microsoft OLE DB Provider for ODBC 的特定实现和功能信息的详细信息,请参阅 OLE DB 程序员参考或访问 MSDN 上的数据访问和存储开发人员中心网站。

另请参阅

Command 对象 (ADO)CommandText 属性 (ADO)Connection 对象 (ADO)ConnectionString 属性 (ADO)Execute 方法 (ADO Command)Open 方法 (ADO Recordset)Parameters 集合 (ADO)Properties 集合 (ADO)Provider 属性 (ADO)Recordset 对象 (ADO)Supports 方法