SQL Server Native Client ODBC 驱动程序忽略SQL_ATTR_CONNECTION_TIMEOUT的设置。
SQL_ATTR_TRANSLATE_LIB也将被忽略;不支持指定另一个翻译库。 为了使应用程序能够轻松地移植为使用适用于 SQL Server 的 Microsoft ODBC 驱动程序,使用 SQL_ATTR_TRANSLATE_LIB 设置的任何值都将复制到驱动程序管理器中的缓冲区和外部缓冲区中。
SQL Server Native Client ODBC 驱动程序将可重复读取事务隔离实现为可序列化的。
SQL Server 2005 引入了对新的事务隔离属性的支持,SQL_COPT_SS_TXN_ISOLATION。 将SQL_COPT_SS_TXN_ISOLATION设置为SQL_TXN_SS_SNAPSHOT表示事务将在快照隔离级别下发生。
注释
SQL_ATTR_TXN_ISOLATION可用于设置除SQL_TXN_SS_SNAPSHOT以外的所有其他隔离级别。 如果要使用快照隔离,则必须通过SQL_COPT_SS_TXN_ISOLATION设置SQL_TXN_SS_SNAPSHOT。 但是,可以使用SQL_ATTR_TXN_ISOLATION或SQL_COPT_SS_TXN_ISOLATION来检索隔离级别。
将 ODBC 语句属性提升到连接属性可能会产生意外的后果。 请求服务器游标处理结果集处理的语句属性可以提升到连接。 例如,将 ODBC 语句属性SQL_ATTR_CONCURRENCY的值比默认SQL_CONCUR_READ_ONLY指示驱动程序对连接上提交的所有语句使用动态游标。 对连接上的语句执行 ODBC 目录函数将返回SQL_SUCCESS_WITH_INFO和诊断记录,指示游标行为已更改为只读。 尝试在同一连接上执行包含 COMPUTE 子句 Transact-SQL SELECT 语句失败。
SQL Server Native Client ODBC 驱动程序支持 sqlncli.h 中定义的 ODBC 连接属性的多个特定于驱动程序的扩展。 SQL Server Native Client ODBC 驱动程序可能需要在连接之前设置该属性,或者如果已设置此属性,则可能会忽略该属性。 下表列出了限制。
| SQL Server 属性 | 在连接到服务器之前或之后设置 |
|---|---|
| SQL_COPT_SS_ANSI_NPW | 之前 |
| SQL_COPT_SS_APPLICATION_INTENT | 之前 |
| SQL_COPT_SS_ATTACHDBFILENAME | 之前 |
| SQL_COPT_SS_BCP | 之前 |
| SQL_COPT_SS_BROWSE_CONNECT | 之前 |
| SQL_COPT_SS_BROWSE_SERVER | 之前 |
| SQL_COPT_SS_CONCAT_NULL | 之前 |
| SQL_COPT_SS_CONNECTION_DEAD | 之后 |
| SQL_COPT_SS_ENCRYPT | 之前 |
| SQL_COPT_SS_ENLIST_IN_DTC | 之后 |
| SQL_COPT_SS_ENLIST_IN_XA | 之后 |
| SQL_COPT_SS_FALLBACK_CONNECT | 之前 |
| SQL_COPT_SS_FAILOVER_PARTNER | 之前 |
| SQL_COPT_SS_INTEGRATED_SECURITY | 之前 |
| SQL_COPT_SS_MARS_ENABLED | 之前 |
| SQL_COPT_SS_MULTISUBMIT_FAILOVER | 之前 |
| SQL_COPT_SS_OLDPWD | 之前 |
| SQL_COPT_SS_PERF_DATA | 之后 |
| SQL_COPT_SS_PERF_DATA_LOG | 之后 |
| SQL_COPT_SS_PERF_DATA_LOG_NOW | 之后 |
| SQL_COPT_SS_PERF_QUERY | 之后 |
| SQL_COPT_SS_PERF_QUERY_INTERVAL | 之后 |
| SQL_COPT_SS_PERF_QUERY_LOG | 之后 |
| SQL_COPT_SS_PRESERVE_CURSORS | 之前 |
| SQL_COPT_SS_QUOTED_IDENT | 任一个 |
| SQL_COPT_SS_TRANSLATE | 任一个 |
| SQL_COPT_SS_TRUST_SERVER_CERTIFICATE | 之前 |
| SQL_COPT_SS_TXN_ISOLATION | 任一个 |
| SQL_COPT_SS_USE_PROC_FOR_PREP | 任一个 |
| SQL_COPT_SS_USER_DATA | 任一个 |
| SQL_COPT_SS_WARN_ON_CP_ERROR | 之前 |
对同一会话、数据库或 SQL Server 状态使用预连接属性和等效的 Transact-SQL 命令可能会导致意外行为。 例如,
SQLSetConnectAttr(SQL_COPT_SS_QUOTED_IDENT, SQL_QI_ON) // turn ON via attribute
SQLDriverConnect(...);
SQLExecDirect("SET QUOTED_IDENTIFIER OFF") // turn OFF via Transact-SQL
SQLSetConnectAttr(SQL_ATTR_CURRENT_CATALOG, ...) // restores to pre-connect attribute value
SQL_COPT_SS_ANSI_NPW
SQL_COPT_SS_ANSI_NPW启用或禁用在比较和串联、字符数据类型填充和警告中使用 NULL 的 ISO 处理。 有关详细信息,请参阅 SET ANSI_NULLS、SET ANSI_PADDING、SET ANSI_WARNINGS 和 SET CONCAT_NULL_YIELDS_NULL。
| 价值 | DESCRIPTION |
|---|---|
| SQL_AD_ON | 违约。 连接使用 ANSI 默认行为来处理 NULL 比较、填充、警告和 NULL 串联。 |
| SQL_AD_OFF | 连接使用 SQL Server 定义的 NULL 处理、字符数据类型填充和警告。 |
如果使用连接池,则应在连接字符串中设置SQL_COPT_SS_ANSI_NPW,而不是使用 SQLSetConnectAttr 设置。 连接完成后,使用连接池时,更改此属性的任何尝试都将以无提示方式失败。
SQL_COPT_SS_APPLICATION_INTENT
连接到服务器时声明应用程序工作负荷类型。 可能的值为 Readonly 和 ReadWrite。 例如:
SQLSetConnectAttr(hdbc, SQL_COPT_SS_APPLICATION_INTENT, TEXT("Readonly"), SQL_NTS)
默认值为 ReadWrite。 有关 SQL Server Native Client 对 AlwaysOn 可用性组 AG 的支持的详细信息,请参阅 SQL Server Native Client 对高可用性、灾难恢复的支持。
SQL_COPT_SS_ATTACHDBFILENAME
SQL_COPT_SS_ATTACHDBFILENAME指定可附加数据库的主文件的名称。 此数据库已附加,并成为连接的默认数据库。 若要使用SQL_COPT_SS_ATTACHDBFILENAME必须将数据库的名称指定为连接属性的值SQL_ATTR_CURRENT_CATALOG或在 SQLDriverConnect 的 DATABASE = 参数中。 如果以前附加了数据库,SQL Server 将不会重新附加它。
| 价值 | DESCRIPTION |
|---|---|
| SQLPOINTER 到字符串 | 字符串包含要附加的数据库的主文件的名称。 包括文件的完整路径名称。 |
SQL_COPT_SS_BCP
SQL_COPT_SS_BCP在连接上启用大容量复制函数。 有关详细信息,请参阅 大容量复制函数。
| 价值 | DESCRIPTION |
|---|---|
| SQL_BCP_OFF | 违约。 大容量复制函数在连接上不可用。 |
| SQL_BCP_ON | 大容量复制函数在连接上可用。 |
SQL_COPT_SS_BROWSE_CONNECT
此属性用于自定义 SQLBrowseConnect 返回的结果集。 SQL_COPT_SS_BROWSE_CONNECT启用或禁用从 SQL Server 的枚举实例返回其他信息。 这可以包括信息,例如服务器是否为群集、不同实例的名称和版本号。
| 价值 | DESCRIPTION |
|---|---|
| SQL_MORE_INFO_NO | 违约。 返回服务器列表。 |
| SQL_MORE_INFO_YES | SQLBrowseConnect 返回服务器属性的扩展字符串。 |
SQL_COPT_SS_BROWSE_SERVER
此属性用于自定义 SQLBrowseConnect 返回的结果集。 SQL_COPT_SS_BROWSE_SERVER指定 SQLBrowseConnect 返回信息的服务器名称。
| 价值 | DESCRIPTION |
|---|---|
| computername | SQLBrowseConnect 返回指定计算机上的 SQL Server 实例列表。 不应将双反斜杠 (\\) 用于服务器名称(例如,应使用 \\MyServer,而不是 \\MyServer)。 |
| Null | 违约。 SQLBrowseConnect 返回域中所有服务器的信息。 |
SQL_COPT_SS_CONCAT_NULL
SQL_COPT_SS_CONCAT_NULL在串联字符串时启用或禁用对 NULL 的 ISO 处理。 有关详细信息,请参阅 SET CONCAT_NULL_YIELDS_NULL。
| 价值 | DESCRIPTION |
|---|---|
| SQL_CN_ON | 违约。 连接使用 ISO 默认行为在串联字符串时处理 NULL 值。 |
| SQL_CN_OFF | 连接使用 SQL Server 定义的行为在连接字符串时处理 NULL 值。 |
SQL_COPT_SS_ENCRYPT
控制连接的加密。
加密使用服务器上的证书。 证书颁发机构必须对此进行验证,除非连接属性SQL_COPT_SS_TRUST_SERVER_CERTIFICATE设置为SQL_TRUST_SERVER_CERTIFICATE_YES,否则连接字符串包含“TrustServerCertificate=yes”。 如果上述任一条件为 true,则服务器生成并签名的证书可用于加密连接(如果服务器上没有证书)。
| 价值 | DESCRIPTION |
|---|---|
| SQL_EN_ON | 连接将加密。 |
| SQL_EN_OFF | 不会加密连接。 这是默认值。 |
SQL_COPT_SS_ENLIST_IN_DTC
客户端调用 Microsoft 分布式事务处理协调器 (MS DTC) OLE DB ITransactionDispenser::BeginTransaction 方法以开始 MS DTC 事务并创建表示事务的 MS DTC 事务对象。 然后,应用程序使用 SQL_COPT_SS_ENLIST_IN_DTC 选项调用 SQLSetConnectAttr ,以将事务对象与 ODBC 连接相关联。 所有相关数据库活动将在 MS DTC 事务的保护下执行。 应用程序调用 SQLSetConnectAttr SQL_DTC_DONE以结束连接的 DTC 关联。
| 价值 | DESCRIPTION |
|---|---|
| DTC 对象* | MS DTC OLE 事务对象,指定要导出到 SQL Server 的事务。 |
| SQL_DTC_DONE | 分隔 DTC 事务的末尾。 |
SQL_COPT_SS_ENLIST_IN_XA
若要使用符合 XA 的事务处理器(TP)开始 XA 事务,客户端将调用 Open Group tx_begin 函数。 然后,应用程序使用 TRUE SQL_COPT_SS_ENLIST_IN_XA 参数调用 SQLSetConnectAttr ,以将 XA 事务与 ODBC 连接相关联。 所有相关数据库活动将在 XA 事务的保护下执行。 若要结束与 ODBC 连接的 XA 关联,客户端必须使用 FALSE SQL_COPT_SS_ENLIST_IN_XA 参数调用 SQLSetConnectAttr 。 有关详细信息,请参阅Microsoft分布式事务处理协调器文档。
SQL_COPT_SS_FALLBACK_CONNECT
不再支持此属性。
SQL_COPT_SS_FAILOVER_PARTNER
用于指定或检索在 SQL Server 中用于数据库镜像的故障转移伙伴的名称,它是一个 null 终止的字符串,在最初建立到 SQL Server 的连接之前必须设置该字符串。
建立连接后,应用程序可以使用 SQLGetConnectAttr 查询此属性,以确定故障转移伙伴的标识。 如果主服务器没有故障转移伙伴,则此属性将返回空字符串。 这样,智能应用程序就可以缓存最近确定的备份服务器,但此类应用程序应注意,只有在首次建立连接时才会更新信息,或者重置(如果已入池)并且可能会过期,以便建立长期连接。
有关详细信息,请参阅 使用数据库镜像。
SQL_COPT_SS_INTEGRATED_SECURITY
SQL_COPT_SS_INTEGRATED_SECURITY强制在服务器登录时使用 Windows 身份验证进行访问验证。 使用 Windows 身份验证时,驱动程序将忽略 SQLConnect、SQLDriverConnect 或 SQLBrowseConnect 处理过程中提供的用户标识符和密码值。
| 价值 | DESCRIPTION |
|---|---|
| SQL_IS_OFF | 违约。 SQL Server 身份验证用于验证登录时的用户标识符和密码。 |
| SQL_IS_ON | Windows 身份验证模式用于验证用户对 SQL Server 的访问权限。 |
SQL_COPT_SS_MARS_ENABLED
此属性启用或禁用多个活动结果集(MARS)。 默认情况下,MARS 处于禁用状态。 在与 SQL Server 建立连接之前,应设置此属性。 打开连接 SQL Server 后,MARS 将在连接生命周期内保持启用或禁用状态。
| 价值 | DESCRIPTION |
|---|---|
| SQL_MARS_ENABLED_NO | 违约。 禁用了多个活动结果集(MARS)。 |
| SQL_MARS_ENABLED_YES | MARS 已启用。 |
有关 MARS 的详细信息,请参阅使用多个活动结果集 (MARS)。
SQL_COPT_SS_MULTISUBNET_FAILOVER
如果应用程序连接到不同子网上的 AlwaysOn 可用性组可用性组(AG),则此连接属性将配置 SQL Server Native Client,以便更快地检测和连接到活动服务器(当前) 活动服务器。 例如:
SQLSetConnectAttr(hdbc, SQL_COPT_SS_MULTISUBMIT_FAILOVER, SQL_IS_ON, SQL_IS_INTEGER)
有关 SQL Server Native Client 对 AlwaysOn 可用性组 AG 的支持的详细信息,请参阅 SQL Server Native Client 对高可用性、灾难恢复的支持。
| 价值 | DESCRIPTION |
|---|---|
| SQL_IS_ON | 如果存在故障转移,SQL Server Native Client 提供更快的重新连接。 |
| SQL_IS_OFF | 如果发生故障转移,SQL Server Native Client 将无法更快地重新连接。 |
SQL_COPT_SS_OLDPWD
在 SQL Server 2005 中引入了 SQL Server 身份验证密码过期功能。 已添加SQL_COPT_SS_OLDPWD属性,以允许客户端提供连接的旧密码和新密码。 设置此属性后,提供程序不会将连接池用于第一个连接或后续连接,因为连接字符串将包含现已更改的“旧密码”。
有关详细信息,请参阅 以编程方式更改密码。
| 价值 | DESCRIPTION |
|---|---|
| SQL_COPT_SS_OLD_PASSWORD | SQLPOINTER 到包含旧密码的字符串。 此值是只读的,必须在连接到服务器之前进行设置。 |
SQL_COPT_SS_PERF_DATA
SQL_COPT_SS_PERF_DATA启动或停止性能数据日志记录。 在开始数据日志记录之前,必须设置数据日志文件名称。 请参阅下面的SQL_COPT_SS_PERF_DATA_LOG。
| 价值 | DESCRIPTION |
|---|---|
| SQL_PERF_START | 启动驱动程序采样性能数据。 |
| SQL_PERF_STOP | 停止计数器对性能数据进行采样。 |
有关详细信息,请参阅 SQLGetConnectAttr。
SQL_COPT_SS_PERF_DATA_LOG
SQL_COPT_SS_PERF_DATA_LOG分配用于记录性能数据的日志文件的名称。 日志文件名称是 ANSI 或 Unicode,以 null 结尾的字符串,具体取决于应用程序编译。 StringLength 参数应SQL_NTS。
SQL_COPT_SS_PERF_DATA_LOG_NOW
SQL_COPT_SS_PERF_DATA_LOG_NOW指示驱动程序将统计信息日志条目写入磁盘。 StringLength 参数应SQL_NTS。
SQL_COPT_SS_PERF_QUERY
SQL_COPT_SS_PERF_QUERY启动或停止长时间运行的查询的日志记录。 在开始日志记录之前,必须提供查询日志文件名称。 应用程序可以通过设置日志记录间隔来定义“长时间运行”。
| 价值 | DESCRIPTION |
|---|---|
| SQL_PERF_START | 启动长时间运行的查询日志记录。 |
| SQL_PERF_STOP | 停止长时间运行的查询的日志记录。 |
有关详细信息,请参阅 SQLGetConnectAttr。
SQL_COPT_SS_PERF_QUERY_INTERVAL
SQL_COPT_SS_PERF_QUERY_INTERVAL设置查询日志记录阈值(以毫秒为单位)。 未解析阈值的查询记录在长时间运行的查询日志文件中。 查询阈值没有上限。 查询阈值为零会导致记录所有查询。
SQL_COPT_SS_PERF_QUERY_LOG
SQL_COPT_SS_PERF_QUERY_LOG分配日志文件的名称,用于记录长时间运行的查询数据。 日志文件名称是 ANSI 或 Unicode,以 null 结尾的字符串,具体取决于应用程序编译。 StringLength 参数应SQL_NTS或字符串长度(以字节为单位)。
SQL_COPT_SS_PRESERVE_CURSORS
此属性允许在提交/回滚事务时查询和设置连接是否会保留游标(s)。 该设置为SQL_PC_ON或SQL_PC_OFF。 默认值为SQL_PC_OFF。 此设置控制调用 SQLEndTran(或 SQLTransact )时驱动程序是否会关闭游标(s)。
| 价值 | DESCRIPTION |
|---|---|
| SQL_PC_OFF | 违约。 使用 SQLEndTran 提交或回滚事务时,游标将关闭。 |
| SQL_PC_ON | 使用 SQLEndTran 提交或回滚事务时,游标不会关闭,但在异步模式下使用静态或键集游标时除外。 如果在游标总体未完成时发出回滚,则关闭游标。 |
SQL_COPT_SS_QUOTED_IDENT
SQL_COPT_SS_QUOTED_IDENT允许 ODBC 中的带引号的标识符,并允许在连接上提交的 Transact-SQL 语句。 通过提供带引号的标识符,SQL Server Native Client ODBC 驱动程序允许其他无效的对象名称,例如“My Table”,该名称包含标识符中的空格字符。 有关详细信息,请参阅 SET QUOTED_IDENTIFIER。
| 价值 | DESCRIPTION |
|---|---|
| SQL_QI_OFF | SQL Server 连接不允许在提交的 Transact-SQL 中使用带引号的标识符。 |
| SQL_QI_ON | 违约。 连接允许在提交的 Transact-SQL 中使用带引号的标识符。 |
SQL_COPT_SS_TRANSLATE
SQL_COPT_SS_TRANSLATE导致驱动程序在交换 MBCS 数据时转换客户端和服务器代码页之间的字符。 该属性仅影响存储在 SQL Serverchar、 varchar 和 文本列中的数据 。
| 价值 | DESCRIPTION |
|---|---|
| SQL_XL_OFF | 驱动程序不会在客户端和服务器之间交换的字符数据中将字符从一个代码页转换为另一个代码页。 |
| SQL_XL_ON | 违约。 驱动程序将字符从一个代码页转换为另一个在客户端和服务器之间交换的字符数据。 驱动程序会自动配置字符转换,确定服务器上安装的代码页以及客户端正在使用的代码页。 |
SQL_COPT_SS_TRUST_SERVER_CERTIFICATE
SQL_COPT_SS_TRUST_SERVER_CERTIFICATE导致驱动程序在使用加密时启用或禁用证书验证。 此属性是读/写值,但在建立连接后对其进行设置不起作用。
客户端应用程序可以在打开连接后查询此属性,以确定正在使用的实际加密和验证设置。
| 价值 | DESCRIPTION |
|---|---|
| SQL_TRUST_SERVER_CERTIFICATE_NO | 违约。 未启用证书验证的加密。 |
| SQL_TRUST_SERVER_CERTIFICATE_YES | 未启用证书验证的加密。 |
SQL_COPT_SS_TXN_ISOLATION
SQL_COPT_SS_TXN_ISOLATION设置 SQL Server 特定的快照隔离属性。 无法使用SQL_ATTR_TXN_ISOLATION设置快照隔离,因为该值特定于 SQL Server。 但是,可以使用SQL_ATTR_TXN_ISOLATION或SQL_COPT_SS_TXN_ISOLATION来检索它。
| 价值 | DESCRIPTION |
|---|---|
| SQL_TXN_SS_SNAPSHOT | 指示从一个事务中看不到在其他事务中所做的更改,即使在重新查询时也看不到更改。 |
有关快照隔离的详细信息,请参阅 使用快照隔离。
SQL_COPT_SS_USE_PROC_FOR_PREP
不再支持此属性。
SQL_COPT_SS_USER_DATA
SQL_COPT_SS_USER_DATA设置用户数据指针。 用户数据是每个连接记录的客户端拥有的内存。
有关详细信息,请参阅 SQLGetConnectAttr。
SQL_COPT_SS_WARN_ON_CP_ERROR
此属性确定在代码页转换期间是否丢失数据,是否会收到警告。 这仅适用于来自服务器的数据。
| 价值 | DESCRIPTION |
|---|---|
| SQL_WARN_YES | 在代码页转换过程中遇到数据丢失时生成警告。 |
| SQL_WARN_NO | (默认值)在代码页转换过程中遇到数据丢失时,不要生成警告。 |
SQLSetConnectAttr 对服务主体名称的支持 (SPN)
SQLSetConnectAttr 可用于设置新连接属性的值SQL_COPT_SS_SERVER_SPN和SQL_COPT_SS_FAILOVER_PARTNER_SPN。 当连接打开时,无法设置这些属性;如果在连接打开时尝试设置这些属性,则返回错误 HY011 并显示消息“此时作无效”。 (SQLSetConnectOption 还可用于设置这些值。
有关 SPN 的详细信息,请参阅 客户端连接(ODBC)中的服务主体名称(SPN)。
SQL_COPT_SS_CONNECTION_DEAD
这是一个只读属性。
有关SQL_COPT_SS_CONNECTION_DEAD的详细信息,请参阅 SQLGetConnectAttr 并连接到数据源(ODBC)。
示例:
此示例记录性能数据。
SQLPERF* pSQLPERF;
SQLINTEGER nValue;
// See if you are already logging. SQLPERF* will be NULL if not.
SQLGetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA, &pSQLPERF,
sizeof(SQLPERF*), &nValue);
if (pSQLPERF == NULL)
{
// Set the performance log file name.
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG,
(SQLPOINTER) "\\My LogDirectory\\MyServerLog.txt", SQL_NTS);
// Start logging...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA,
(SQLPOINTER) SQL_PERF_START, SQL_IS_INTEGER);
}
else
{
// Take a snapshot now so that your performance statistics are discernible.
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);
}
// ...perform some action...
// ...take a performance data snapshot...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);
// ...perform more actions...
// ...take another snapshot...
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA_LOG_NOW, NULL, 0);
// ...and disable logging.
SQLSetConnectAttr(hDbc, SQL_COPT_SS_PERF_DATA,
(SQLPOINTER) SQL_PERF_STOP, SQL_IS_INTEGER);
// Continue on...
另请参阅
SQLSetConnectAttr 函数
ODBC API 实现细节
大容量复制函数
SET ANSI_NULLS(Transact-SQL)
SET ANSI_PADDING (Transact-SQL)
SET ANSI_WARNINGS(Transact-SQL)
SET CONCAT_NULL_YIELDS_NULL(Transact-SQL)
SET QUOTED_IDENTIFIER(Transact-SQL)
SQLPrepare 函数
SQLGetInfo