Microsoft OLE DB Provider for SQL Server 概述

Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 允许 ADO 访问 Microsoft SQL Server。

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除 SQL Server Native Client(通常缩写为 SNAC)。 不建议在新的开发工作中使用 SQL Server Native Client OLE DB 提供程序(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 此后请切换到新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server

连接字符串参数

若要连接到此提供程序,请将 Provider 参数设置为 ConnectionString 属性:

SQLOLEDB

也可以使用 Provider 属性设置或读取此值。

典型的连接字符串

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

"Provider=SQLOLEDB;Data Source=serverName;"
Initial Catalog=databaseName;
User ID=MyUserID;Password=MyPassword;"

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

关键字 说明
提供程序 指定 OLE DB Provider for SQL Server。
Data Source 或 Server 指定服务器的名称。
Initial Catalog 或 Database 指定服务器上的数据库的名称。
User ID 或 uid 指定用户名(用于 SQL Server 身份验证)。
Password 或 pwd 指定用户密码(用于 SQL Server 身份验证)。

注意

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

提供程序特定的连接参数

除了 ADO 定义的连接参数之外,提供程序还支持多个提供程序特定的连接参数。 与 ADO 连接属性一样,可以通过 ConnectionProperties 集合或作为 ConnectionString 的一部分设置这些特定于提供程序的属性。

参数 说明
Trusted_Connection 指示用户身份验证模式。 可设置为“是”或“否”。 默认值为。 如果此属性设置为“是”,则 SQLOLEDB 使用 Microsoft Windows NT 身份验证模式来授权用户访问 LocationDatasource 属性值指定的 SQL Server 数据库。 如果此属性设置为“否”,则 SQLOLEDB 使用混合模式来授权用户访问 SQL Server 数据库。 SQL Server 登录名和密码是在 User Id 和 Password 属性中指定的。
Current Language 指示 SQL Server 语言名称。 标识用于系统消息选择和格式化的语言。 语言必须安装在 SQL Server 上,否则打开连接将失败。
Network Address 指示 Location 属性指定的 SQL Server 的网络地址。
Network Library 指示用于与 SQL Server 通信的网络库 (DLL) 的名称。 该名称不应当包含路径或 .dll 文件扩展名。 默认值由 SQL Server 客户端配置提供。
使用准备程序 确定当(由 Prepared 属性)准备命令时 SQL Server 是否创建临时存储过程。
自动翻译 指示是否转换 OEM/ANSI 字符。 此属性可设置为 True 或 False。 默认值为 True。 如果此属性设置为 True,则当从 SQL Server 检索多字节字符串或将多字节字符串发送到 SQL Server 时,SQLOLEDB 将执行 OEM/ANSI 字符转换。 如果此属性设置为 False,则 SQLOLEDB 不会对多字节字符串数据执行 OEM/ANSI 字符转换。
Packet Size 指示网络数据包大小(以字节为单位)。 数据包大小属性值必须介于 512 和 32767 之间。 默认 SQLOLEDB 网络数据包大小为 4096。
应用程序名称 指示客户端应用程序名称。
工作站 ID 用于标识工作站的字符串。

Command 对象使用情况

SQLOLEDB 接受 ODBC、ANSI 和特定于 SQL Server 的 Transact-SQL 的组合作为有效的语法。 例如,以下 SQL 语句使用 ODBC SQL 转义序列指定 LCASE 字符串函数:

SELECT customerid={fn LCASE(CustomerID)} FROM Customers

LCASE 返回一个字符串,将所有大写字母字符转换为相应的小写字母字符。 ANSI SQL 字符串函数 LOWER 执行相同的操作,因此以下 SQL 语句是与上述 ODBC 语句等效的 ANSI 命令:

SELECT customerid=LOWER(CustomerID) FROM Customers

在指定为命令的文本时,SQLOLEDB 成功处理这种语句的形式之一。

存储过程

使用 SQLOLEDB 命令执行 SQL Serve 存储过程时,在命令文本中使用 ODBC 过程调用转义序列。 SQLOLEDB 然后使用 SQL Server 的远程过程调用机制优化命令处理。 例如,以下 ODBC SQL 语句是比 Transact-SQL 形式更常使用的命令文本:

ODBC SQL

{call SalesByCategory('Produce', '1995')}

Transact-SQL

EXECUTE SalesByCategory 'Produce', '1995'

SQL Server 功能

使用 SQL Server,ADO 可以使用 XML 进行命令输入,并将结果检索到 XML 流格式而不是 Recordset 对象中。 有关详细信息,请参阅使用流进行命令输入将结果集检索到流中

使用 MDAC 2.7、MDAC 2.8 或 Windows DAC 6.0 访问 sql_variant 数据

Microsoft SQL Server具有名为 sql_variant 的数据类型。 与 OLE DB 的 DBTYPE_VARIANT 类似,sql_variant 数据类型可以存储多种不同类型的数据。 但是,DBTYPE_VARIANT 和 sql_variant 之间存在一些主要差异。 ADO 还处理以 sql_variant 值的形式存储的数据,与处理其他数据类型的方式不同。 以下列表介绍了访问存储在类型 sql_variant 的列中的 SQL Server 数据时需要考虑的问题。

  • 在 MDAC 2.7、MDAC 2.8 和 Windows 数据访问组件 (Windows DAC) 6.0 中,OLE DB Provider for SQL Server 支持 sql_variant 类型。 OLE DB Provider for ODBC 不支持。

  • sql_variant 类型与 DBTYPE_VARIANT 数据类型不完全匹配。 sql_variant 类型支持 DBTYPE_VARIANT 不支持的几个新子类型,包括 GUID、ANSI(非 UNICODE)字符串和 BIGINT。 使用前面未列出的子类型将正常工作。

  • sql_variant 子类型 NUMERIC 的大小与 DBTYPE_DECIMAL 的大小不匹配。

  • 多个数据类型强制将导致类型不匹配。 例如,将子类型为 GUID 的 sql_variant 强制转换为 DBTYPE_VARIANT 将导致子类型为 safearray(字节)。 将此类型转换回 sql_variant 将导致新子类型为 array(字节)。

  • 仅当 sql_variant 包含特定子类型时,才能远程处理(封送处理)或保留包含 sql_variant 数据的 Recordset 字段。 尝试使用以下不支持的子类型远程处理或保留数据将导致 Microsoft 暂留提供程序 (MSPersist) 出现运行时错误(不支持的转换):VT_VARIANT、VT_RECORD、VT_ILLEGAL、VT_UNKNOWN、VT_BSTR 和 VT_DISPATCH。

  • MDAC 2.7、MDAC 2.8 和 Windows DAC 6.0 中的 OLE DB Provider for SQL Server 具有一个名为“允许本机变体”的动态属性,顾名思义,允许开发人员使用其本机形式访问 sql_variant,而不是 DBTYPE_VARIANT。 如果设置了此属性且使用客户端游标引擎 (adUseClient) 打开了 Recordset,则 Recordset.Open 调用将失败。 如果设置了此属性且使用服务器游标 (adUseServer) 打开了 Recordset,则 Recordset.Open 调用将成功,但访问类型 sql_variant 的列将产生错误。

  • 在使用 MDAC 2.5 的客户端应用程序中,可以将 sql_variant 数据与针对 Microsoft SQL Server 的查询一起使用。 但是,sql_variant 数据的值被视为字符串。 此类客户端应用程序应升级到 MDAC 2.7、MDAC 2.8 或 Windows DAC 6.0。

Recordset 行为

SQLOLEDB 无法使用 SQL Server 游标来支持由许多命令生成的多个结果。 如果使用者请求需要 SQL Server 游标支持的记录集,则当使用的命令文本生成多个记录集作为其结果时,将出现错误。

SQL Server 游标支持 SQLOLEDB 的可滚动记录集。 针对对于由数据库的其他用户所做更改敏感的游标,SQL Server 将强加相关的限制。 具体而言,某些游标中的行无法排序,并且尝试使用包含 SQL ORDER BY 子句的命令创建记录集可能会失败。

动态属性

Microsoft OLE DB Provider for SQL Server 将多个动态属性插入到未打开的 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_MAXINDEXSIZE
最大行大小 DBPROP_MAXROWSIZE
最大行大小包括 BLOB DBPROP_MAXROWSIZEINCLUDESBLOB
SELECT 中的最大表数 DBPROP_MAXTABLESINSELECT
多个参数集 DBPROP_MULTIPLEPARAMSETS
多个结果 DBPROP_MULTIPLERESULTS
多种存储选项 DBPROP_MULTIPLESTORAGEOBJECTS
多表更新 DBPROP_MULTITABLEUPDATE
NULL 排序规则顺序 DBPROP_NULLCOLLATION
NULL 串联行为 DBPROP_CONCATNULLBEHAVIOR
OLE DB 版本 DBPROP_PROVIDEROLEDBVER
OLE 对象支持 DBPROP_OLEOBJECTS
打开行集支持 DBPROP_OPENROWSETSUPPORT
Select 列表中的 ORDER BY 列 DBPROP_ORDERBYCOLUMNSINSELECT
输出参数可用性 DBPROP_OUTPUTPARAMETERAVAILABILITY
通过 Ref 访问器传递 DBPROP_BYREFACCESSORS
密码 DBPROP_AUTH_PASSWORD
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_COMMANDTIMEOUT
延迟列 DBPROP_DEFERRED
延迟存储对象更新 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_IRowsestLocate
IRowsetResynch
IRowsetScroll DBPROP_IRowsetScroll
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_OTHERUPDATEDELETE
其他人的插入可见 DBPROP_OTHERINSERT
自己的更改可见 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_SERVERCURSOR
跳过已删除的书签 DBPROP_BOOKMARKSKIPPED
强行标识 DBPROP_STRONGITDENTITY
唯一行 DBPROP_UNIQUEROWS
可更新性 DBPROP_UPDATABILITY
使用书签 DBPROP_BOOKMARKS

Command 动态属性

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

ADO 属性名称 OLE DB 属性名称
访问顺序 DBPROP_ACCESSORDER
基路径 SSPROP_STREAM_BASEPATH
阻止存储对象 DBPROP_BLOCKINGSTORAGEOBJECTS
书签类型 DBPROP_BOOKMARKTYPE
可对其添加书签 DBPROP_IROWSETLOCATE
更改插入的行 DBPROP_CHANGEINSERTEDROWS
列特权 DBPROP_COLUMNRESTRICT
列集通知 DBPROP_NOTIFYCOLUMNSET
内容类型 SSPROP_STREAM_CONTENTTYPE
游标自动提取 SSPROP_CURSORAUTOFETCH
延迟列 DBPROP_DEFERRED
延迟准备 SSPROP_DEFERPREPARE
延迟存储对象更新 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 DBPROP_IRowsetResynch
IRowsetScroll DBPROP_IRowsetScroll
IRowsetUpdate DBPROP_IRowsetUpdate
ISequentialStream DBPROP_ISequentialStream
ISupportErrorInfo DBPROP_ISupportErrorInfo
文本书签 DBPROP_LITERALBOOKMARKS
文本行标识 DBPROP_LITERALIDENTITY
锁定模式 DBPROP_LOCKMODE
最大打开行数 DBPROP_MAXOPENROWS
最大挂起行数 DBPROP_MAXPENDINGROWS
最大行数 DBPROP_MAXROWS
通知粒度 DBPROP_NOTIFICATIONGRANULARITY
通知阶段 DBPROP_NOTIFICATIONPHASES
对象事务处理 DBPROP_TRANSACTEDOBJECT
其他人的更改可见 DBPROP_OTHERUPDATEDELETE
其他人的插入可见 DBPROP_OTHERINSERT
输出编码属性 DBPROP_OUTPUTENCODING
输出流属性 DBPROP_OUTPUTSTREAM
自己的更改可见 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_SERVERCURSOR
Server Data on Insert DBPROP_SERVERDATAONINSERT
跳过已删除的书签 DBPROP_BOOKMARKSKIP
强行标识 DBPROP_STRONGIDENTITY
可更新性 DBPROP_UPDATABILITY
使用书签 DBPROP_BOOKMARKS
XML 根 SSPROP_STREAM_XMLROOT
XSL SSPROP_STREAM_XSL

有关 Microsoft SQL Server OLE DB Provider 的特定实现详细信息和功能信息,请参阅 SQL Server 提供程序

另请参阅

ConnectionString 属性 (ADO)Provider 属性 (ADO)Recordset 对象 (ADO)