Microsoft OLE DB Provider for SQL Server 概述

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

重要

SQL Server Native Client(通常缩写的 SNAC)已从 SQL Server 2022(16.x)和 SQL Server Management Studio 19(SSMS)中删除。 不建议在新开发中使用 SQL Server Native Client OLE DB 提供程序(SQLNCLI 或 SQLNCLI11)以及旧版 Microsoft 用于 SQL Server 的 OLE DB 提供程序(SQLOLEDB)。 今后,请切换到新的 Microsoft OLE DB 驱动程序(MSOLEDBSQL),以用于 SQL Server

连接字符串参数

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

SQLOLEDB

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

典型连接字符串

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

"Provider=SQLOLEDB;Data Source=serverName;"
Initial Catalog=databaseName;
User ID=MyUserID;Password=<password>;"

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

关键词 描述
提供者 指定 SQL Server 的 OLE DB 提供程序。
数据源服务器 指定服务器的名称。
初始目录数据库 指定服务器上的数据库的名称。
用户 IDuid 指定用户名(对于 SQL Server 身份验证)。
密码pwd 指定用户密码(用于 SQL Server 身份验证)。

注意

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

Provider-Specific 连接参数

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

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

命令对象用法

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 Server 存储过程时,请使用命令文本中的 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_VARIANTsql_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 不支持的新子类型, 包括 GUIDANSI(非 UNICODE)字符串,以及 BIGINT。 使用前面列出的子类型以外的子类型将正常工作。

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

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

  • 包含 sql_variant 数据的记录集 字段只有在 sql_variant 包含特定的子类型时,才能进行远程处理(封送)或持久化。 尝试使用以下不受支持的子类型远程或持久化数据时,会导致运行时错误(不支持的转换),来自 Microsoft 持久性提供程序(MSPersist):VT_VARIANTVT_RECORDVT_ILLEGALVT_UNKNOWNVT_BSTRVT_DISPATCH。

  • MDAC 2.7、MDAC 2.8 和 Windows DAC 6.0 中的 OLE DB Provider for SQL Server 具有一个名为 “允许本机变体” 的动态属性,这一属性允许开发人员在其原生形式下访问 sql_variant,而不是通过 DBTYPE_VARIANT。 如果设置了此属性,并且客户端游标引擎打开 RecordsetadUseClient),则 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。

记录集行为

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 程序员参考以术语“Description”引用 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
连接超时 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_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
在选择列表中的列上使用 ORDER BY DBPROP_ORDERBYCOLUMNSINSELECT
输出参数可用性 DBPROP_OUTPUTPARAMETERAVAILABILITY
通过 Ref 访问器传递 DBPROP_BYREFACCESSORS
密码 DBPROP_AUTH_PASSWORD
持久保存安全信息 DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO
持久 ID 类型 DBPROP_PERSISTENTIDTYPE
准备中止行为 DBPROP_PREPAREABORTBEHAVIOR
准备提交行为 DBPROP_PREPARECOMMITBEHAVIOR
过程术语 DBPROP_PROCEDURETERM
提示 DBPROP_INIT_PROMPT
服务提供者的易识别名称 DBPROP_PROVIDERFRIENDLYNAME
提供者名称 DBPROP_PROVIDERFILENAME
供应商版本 DBPROP_PROVIDERVER
Read-Only 数据源 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 动态属性

以下属性将添加到 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 对象的 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
插入时的服务器数据 DBPROP_SERVERDATAONINSERT
跳过已删除书签 DBPROP_BOOKMARKSKIP
强行标识 DBPROP_STRONGIDENTITY
可更新性 DBPROP_UPDATABILITY
使用书签 DBPROP_BOOKMARKS
XML 根 SSPROP_STREAM_XMLROOT
XSL SSPROP_STREAM_XSL

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

另请参阅

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