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 连接属性一样,可以通过 Connection 的 Properties 集合或作为 ConnectionString 的一部分设置这些特定于提供程序的属性。
参数 | 说明 |
---|---|
Trusted_Connection | 指示用户身份验证模式。 可设置为“是”或“否”。 默认值为“否”。 如果此属性设置为“是”,则 SQLOLEDB 使用 Microsoft Windows NT 身份验证模式来授权用户访问 Location 和 Datasource 属性值指定的 SQL Server 数据库。 如果此属性设置为“否”,则 SQLOLEDB 使用混合模式来授权用户访问 SQL Server 数据库。 SQL Server 登录名和密码是在 User Id 和 Password 属性中指定的。 |
当前语言 | 指示 SQL Server 语言名称。 标识用于系统消息选择和格式化的语言。 语言必须安装在 SQL Server 上,否则打开连接将失败。 |
网络地址 | 指示 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 将多个动态属性插入到未打开的 Connection、Recordset 和 Command 对象的 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 |
连接超时值 | 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 |
持久性安全信息 | DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO |
持久性 ID 类型 | DBPROP_PERSISTENTIDTYPE |
准备中止行为 | DBPROP_PREPAREABORTBEHAVIOR |
准备提交行为 | DBPROP_PREPARECOMMITBEHAVIOR |
过程术语 | DBPROP_PROCEDURETERM |
Prompt | DBPROP_INIT_PROMPT |
提供程序友好名称 | DBPROP_PROVIDERFRIENDLYNAME |
Provider Name | 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 |
插入时的服务器数据 | 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)