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 提供程序。 |
数据源 或 服务器 | 指定服务器的名称。 |
初始目录 或 数据库 | 指定服务器上的数据库的名称。 |
用户 ID 或 uid | 指定用户名(对于 SQL Server 身份验证)。 |
密码 或 pwd | 指定用户密码(用于 SQL Server 身份验证)。 |
注意
如果要连接到支持 Windows 身份验证的数据源提供程序,则应指定 Trusted_Connection=yes 或 Integrated 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 字符。 此属性可以设置为 True 或 False。 默认值为 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_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 不匹配。
多个数据类型强制将导致类型不匹配。 例如,将 sql_variant 的子类型 GUID 强制转换为 DBTYPE_VARIANT 将导致 安全数组(字节)的子类型。 将此类型转换回 sql_variant 将导致 数组(字节)的新子类型。
包含 sql_variant 数据的记录集 字段只有在 sql_variant 包含特定的子类型时,才能进行远程处理(封送)或持久化。 尝试使用以下不受支持的子类型远程或持久化数据时,会导致运行时错误(不支持的转换),来自 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。 如果设置了此属性,并且客户端游标引擎打开 Recordset(adUseClient),则 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 将多个动态属性插入未打开的 Connection、Recordset和 Command 对象的 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)