SQLSetConnectAttr 函数

一致性
引入的版本:ODBC 3.0 标准符合性:ISO 92

摘要
SQLSetConnectAttr 设置控制连接方面的属性。

注意

有关当 ODBC 3*.x* 应用程序使用 ODBC 2*.x* 驱动程序时驱动程序管理器将此函数映射到的内容的详细信息,请参阅 映射替换函数以实现应用程序的向后兼容性

语法

  
SQLRETURN SQLSetConnectAttr(  
     SQLHDBC       ConnectionHandle,  
     SQLINTEGER    Attribute,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    StringLength);  

参数

ConnectionHandle
[输入] 连接句柄。

Attribute
[输入]要设置的属性,在“注释”中列出。

ValuePtr
[输入]指向要与 Attribute 关联的值的指针。 根据 Attribute 的值, ValuePtr 将是无符号整数值,或者将指向以 null 结尾的字符串。 请注意, Attribute 参数的整型类型可能不是固定长度,有关详细信息,请参阅注释部分。

StringLength
[输入]如果 Attribute 是 ODBC 定义的属性,并且 ValuePtr 指向字符串或二进制缓冲区,则此参数的长度应为 *ValuePtr。 对于字符串数据,此参数应包含字符串中的字节数。

如果 Attribute 是 ODBC 定义的属性, 而 ValuePtr 是整数,则忽略 StringLength

如果 Attribute 是驱动程序定义的属性,则应用程序通过设置 StringLength 参数向驱动程序管理器指示属性的性质。 StringLength 可以具有以下值:

  • 如果 ValuePtr 是指向字符串的指针,则 StringLength 是字符串的长度或SQL_NTS。

  • 如果 ValuePtr 是指向二进制缓冲区的指针,则应用程序会将SQL_LEN_BINARY_ATTR (长度 的结果放在 StringLength 中) 宏中。 这会在 StringLength 中放置负值。

  • 如果 ValuePtr 是指向字符串或二进制字符串以外的值的指针,则 StringLength 应具有值SQL_IS_POINTER。

  • 如果 ValuePtr 包含固定长度的值,则 StringLength 是SQL_IS_INTEGER或SQL_IS_UINTEGER,视情况而定。

返回

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、SQL_INVALID_HANDLE或SQL_STILL_EXECUTING。

诊断

SQLSetConnectAttr 返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时,可以通过使用 handleType SQL_HANDLE_DBC 和 ConnectionHandle句柄调用 SQLGetDiagRec 来获取关联的 SQLSTATE 值。 下表列出了 SQLSetConnectAttr 通常返回的 SQLSTATE 值,并说明了此函数上下文中的每个值:表示法“ (DM) ”位于驱动程序管理器返回的 SQLSTATE 说明之前。 与每个 SQLSTATE 值关联的返回代码SQL_ERROR,除非另有说明。

驱动程序可以返回SQL_SUCCESS_WITH_INFO,以提供有关设置选项的结果的信息。

SQLSTATE 错误 说明
01000 常规警告 特定于驱动程序的信息性消息。 (函数返回 SQL_SUCCESS_WITH_INFO.)
01S02 选项值已更改 驱动程序不支持 ValuePtr 中指定的值,并替换了类似的值。 (函数返回 SQL_SUCCESS_WITH_INFO.)
08002 正在使用的连接名称 Attribute 参数已SQL_ATTR_ODBC_CURSORS,并且驱动程序已连接到数据源。
08003 连接未打开 (DM) 指定了需要打开连接的 属性值 ,但 ConnectionHandle 未处于连接状态。
08S01 通信链接失败 在函数完成处理之前,驱动程序与所连接的数据源之间的通信链接失败。
24000 游标状态无效 Attribute 参数已SQL_ATTR_CURRENT_CATALOG,结果集处于挂起状态。
25000 在本地事务中执行非法操作 尝试通过设置连接属性 (SQL_ATTR_ENLIST_IN_DTC在 DTC) 的分布式事务连接中登记时,连接位于本地事务中。

已在 DTC 中登记连接。

在分布式事务连接中登记了连接,并且通过将 SQL_ATTR_AUTOCOMMIT 设置为 SQL_AUTOCOMMIT_OFF 启动了本地事务。
3D000 目录名称无效 Attribute 参数SQL_CURRENT_CATALOG,指定的目录名称无效。
HY000 常规错误 发生错误,其中没有特定的 SQLSTATE,也没有定义特定于实现的 SQLSTATE。 SQLGetDiagRec*MessageText 缓冲区中返回的错误消息描述了错误及其原因。
HY001 内存分配错误 驱动程序无法分配支持执行或完成函数所需的内存。
HY008 操作已取消 已为 ConnectionHandle 启用异步处理。 调用了 SQLSetConnectAttr 函数,在它完成执行之前,在 ConnectionHandle 上调用了 SQLCancelHandle 函数,然后在 ConnectionHandle 上再次调用 SQLSetConnectAttr 函数。

或者,调用了 SQLSetConnectAttr 函数,在它完成执行之前,从多线程应用程序中的不同线程在 ConnectionHandle 上调用了 SQLCancelHandle
HY009 null 指针的使用无效 Attribute 参数标识了需要字符串值的连接属性,ValuePtr 参数为 null 指针。
HY010 函数序列错误 (DM) 为与 ConnectionHandle 关联的 StatementHandle 调用了异步执行的函数,并在调用 SQLSetConnectAttr 时仍在执行。

(DM) 为 ConnectionHandle 调用的异步执行函数 (不是此函数) ,并且调用此函数时仍在执行。

(DM) SQLExecuteSQLExecDirectSQLMoreResults 已为 与 ConnectionHandle 关联的语句句柄之一调用,并返回SQL_PARAM_DATA_AVAILABLE。 此函数是在检索所有流参数的数据之前调用的。

(DM) SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos 已调用与 ConnectionHandle 关联的 StatementHandle 并返回SQL_NEED_DATA。 在针对所有数据执行参数或列发送数据之前调用了此函数。

(DM) SQLBrowseConnect 已为 ConnectionHandle 调用并返回SQL_NEED_DATA。 此函数是在 SQLBrowseConnect 返回SQL_SUCCESS_WITH_INFO或SQL_SUCCESS之前调用的。
HY011 现在无法设置属性 Attribute 参数已SQL_ATTR_TXN_ISOLATION,事务已打开。
HY013 内存管理错误 无法处理函数调用,因为无法访问基础内存对象,可能是由于内存不足。
HY024 属性值无效 给定指定的 属性值ValuePtr 中指定的值无效。 (驱动程序管理器仅对接受一组离散值(如SQL_ATTR_ACCESS_MODE或SQL_ATTR_ASYNC_ENABLE)的连接和语句属性返回此 SQLSTATE。对于所有其他连接和语句属性,驱动程序必须验证 ValuePtr.)

Attribute 参数SQL_ATTR_TRACEFILE或SQL_ATTR_TRANSLATE_LIB,ValuePtr 为空字符串。
HY090 无效的字符串或缓冲区长度 (DM) *ValuePtr 是字符串, StringLength 参数小于 0 但未SQL_NTS。
HY092 无效的属性/选项标识符 (DM) 为参数 Attribute 指定的值对驱动程序支持的 ODBC 版本无效。

(DM) 为参数 Attribute 指定的值为只读属性。
HY114 驱动程序不支持连接级异步函数执行 (DM) 应用程序尝试为不支持异步连接操作的驱动程序启用SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE异步函数执行。
HY117 由于未知的事务状态,连接已挂起。 仅允许断开连接和只读函数。 (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数
HY121 不能同时启用游标库和Driver-Aware池 有关详细信息,请参阅 驱动程序感知连接池
HYC00 未实现可选功能 为参数 Attribute 指定的值是驱动程序支持的 ODBC 版本的有效 ODBC 连接或语句属性,但驱动程序不支持。
HYT01 超过连接超时时间 在数据源响应请求之前,连接超时期限已过期。 连接超时期限是通过 SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT设置的。
IM001 驱动程序不支持此函数 (DM) 与 ConnectionHandle 关联的驱动程序不支持 函数。
IM009 无法加载转换 DLL 驱动程序无法加载为连接指定的转换 DLL。 仅当SQL_ATTR_TRANSLATE_LIB Attribute 时,才能返回此错误。
IM017 在异步通知模式下禁用轮询 每当使用通知模型时,轮询都将被禁用。
IM018 尚未调用 SQLCompleteAsync 来完成此句柄上的上一个异步操作。 如果句柄上的上一个函数调用返回SQL_STILL_EXECUTING并且启用了通知模式,则必须在句柄上调用 SQLCompleteAsync 以执行后期处理并完成操作。
S1118 驱动程序不支持异步通知 SQL_ATTR_ASYNC_DBC_EVENT是在) 建立连接后 (设置的,但驱动程序不支持异步通知。

Attribute 是语句属性时, SQLSetConnectAttr 可以返回 SQLSetStmtAttr 返回的任何 SQLSTATE

注释

有关连接属性的一般信息,请参阅 连接属性

当前定义的属性和引入它们的 ODBC 版本在本部分后面的表中显示;预期会定义更多属性以利用不同的数据源。 一系列属性由 ODBC 保留;驱动程序开发人员必须保留值供自己从开放组使用特定于驱动程序的值。

注意

ODBC 3*.x* 中已弃用通过调用 SQLSetConnectAttr 在连接级别设置语句属性的功能。 ODBC 3*.x* 应用程序绝不应在连接级别设置语句属性。 不能在连接级别设置 ODBC 3*.x* 语句属性,SQL_ATTR_METADATA_ID和SQL_ATTR_ASYNC_ENABLE属性除外,这两个属性都是连接属性和语句属性,可以在连接级别或语句级别设置。

如果 ODBC 3*.x* 驱动程序应使用在连接级别设置 ODBC 2*.x* 语句选项的 ODBC 2*.x* 应用程序,则仅需要支持此功能。 有关详细信息,请参阅附录 G:驱动程序向后兼容性指南中的 SQLSetConnectOption Mapping

应用程序可以在分配和释放连接之间的任何时间调用 SQLSetConnectAttr 。 应用程序为连接成功设置的所有连接和语句属性将一直保留,直到对连接调用 SQLFreeHandle 。 例如,如果应用程序在连接到数据源之前调用 SQLSetConnectAttr ,则即使当应用程序连接到数据源时 ,驱动程序中的 SQLSetConnectAttr 失败,该属性仍会保留;如果应用程序设置了特定于驱动程序的属性,则即使应用程序连接到连接上的其他驱动程序,该属性也会保留。

某些连接属性只能在建立连接之前设置;只能在建立连接后设置其他项。 下表指示在建立连接之前或之后必须设置的连接属性。 任一 指示可以在连接之前或之后设置 属性。

Attribute 在连接之前或之后设置?
SQL_ATTR_ACCESS_MODE Either[1]
SQL_ATTR_ASYNC_DBC_EVENT 任一个
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE Either[4]
SQL_ATTR_ASYNC_DBC_PCALLBACK 任一个
SQL_ATTR_ASYNC_DBC_PCONTEXT 任一个
SQL_ATTR_ASYNC_ENABLE Either[2]
SQL_ATTR_AUTO_IPD 任一个
SQL_ATTR_AUTOCOMMIT Either[5]
SQL_ATTR_CONNECTION_DEAD 之后
SQL_ATTR_CONNECTION_TIMEOUT 任一个
SQL_ATTR_CURRENT_CATALOG Either[1]
SQL_ATTR_DBC_INFO_TOKEN 之后
SQL_ATTR_ENLIST_IN_DTC 之后
SQL_ATTR_LOGIN_TIMEOUT 以前
SQL_ATTR_METADATA_ID 任一个
SQL_ATTR_ODBC_CURSORS 以前
SQL_ATTR_PACKET_SIZE 以前
SQL_ATTR_QUIET_MODE 任一个
SQL_ATTR_TRACE 任一个
SQL_ATTR_TRACEFILE 任一个
SQL_ATTR_TRANSLATE_LIB 之后
SQL_ATTR_TRANSLATE_OPTION 之后
SQL_ATTR_TXN_ISOLATION Either[3]

[1] 可以在连接之前或之后设置SQL_ATTR_ACCESS_MODE和SQL_ATTR_CURRENT_CATALOG,具体取决于驱动程序。 但是,可互操作的应用程序在连接之前设置它们,因为某些驱动程序不支持在连接后更改它们。

[2] 必须先设置SQL_ATTR_ASYNC_ENABLE,然后才能有活动语句。

[3] 仅当连接上没有打开的事务时,才能设置SQL_ATTR_TXN_ISOLATION。 如果数据源不支持 *ValuePtr 中指定的值,则某些连接属性支持替换类似的值。 在这种情况下,驱动程序返回SQL_SUCCESS_WITH_INFO,SQLSTATE 01S02 (选项值) 更改。 例如,如果 Attribute 为 SQL_ATTR_PACKET_SIZE 并且 *ValuePtr 超过最大数据包大小,则驱动程序将替换最大大小。 若要确定替换的值,应用程序会调用 SQLGetConnectAttr

[4] 如果在打开连接之前设置了SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE,则驱动程序管理器将在调用 SQLBrowseConnect、SQLConnectSQLDriverConnect 期间加载驱动程序时设置驱动程序的 属性。 在调用 SQLBrowseConnectSQLConnectSQLDriverConnect 之前,驱动程序管理器不知道要连接到哪个驱动程序,也不知道驱动程序是否支持异步连接操作。 因此,驱动程序管理器始终返回SQL_SUCCESS。 但是,如果驱动程序不支持异步连接操作,则对 SQLBrowseConnectSQLConnectSQLDriverConnect 的 调用将失败。

[5] 当 SQL_ATTR_AUTOCOMMIT 设置为 FALSE 时,如果有任何 API 返回SQL_ERROR以确保事务一致性,应用程序应调用 SQLEndTran (SQL_ROLLBACK) 。

*ValuePtr 缓冲区中设置的信息的格式取决于指定的属性SQLSetConnectAttr 将接受以下两种格式之一的属性信息:以 null 结尾的字符串或整数值。 属性的说明中会记录每个格式。 SQLSetConnectAttrValuePtr 参数指向的字符串的长度为 StringLength 字节。

如果长度由 属性定义,则忽略 StringLength 参数,就像 ODBC 2*.x* 或更早版本中引入的所有属性一样。

Attribute ValuePtr 内容
SQL_ATTR_ACCESS_MODE (ODBC 1.0) SQLUINTEGER 值。 驱动程序或数据源使用SQL_MODE_READ_ONLY作为指示,指示不需要连接即可支持导致更新的 SQL 语句。 此模式可用于根据驱动程序或数据源优化锁定策略、事务管理或其他方面。 驱动程序不需要阻止将此类语句提交到数据源。 当要求处理在只读连接期间不是只读的 SQL 语句时,驱动程序和数据源的行为是实现定义的。 SQL_MODE_READ_WRITE为默认值。
SQL_ATTR_ASYNC_DBC_EVENT (ODBC 3.8) 作为事件句柄的 SQLPOINTER 值。

通过使用 SQL_ATTR_ASYNC_STMT_EVENT 属性调用 SQLSetConnectAttr 并指定事件句柄,可以启用异步函数完成通知。 注意: 游标库不支持通知方法。 如果应用程序尝试在启用通知方法时通过 SQLSetConnectAttr 启用游标库,则会收到错误消息。
SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE (ODBC 3.8) 一个 SQLUINTEGER 值,用于启用或禁用对连接句柄上的所选函数的异步执行。 有关详细信息,请参阅 异步执行 (轮询方法)

SQL_ASYNC_DBC_ENABLE_ON = 为指定的连接相关函数启用异步操作。

SQL_ASYNC_DBC_ENABLE_OFF = (默认) 禁用指定连接相关函数的异步操作。

设置SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE始终是同步 (也就是说,它永远不会返回SQL_STILL_EXECUTING) 。

使用 SQL_ATTR_ASYNC_ENABLE 启用语句操作的异步执行。
SQL_ATTR_ASYNC_DBC_PCALLBACK (ODBC 3.8) 指向上下文结构的 SQLPOINTER 值。

只有驱动程序管理器可以使用此属性调用驱动程序的 SQLSetStmtAttr 函数。
SQL_ATTR_ASYNC_DBC_PCONTEXT (ODBC 3.8) 指向上下文结构的 SQLPOINTER 值。

只有驱动程序管理器可以使用此属性调用驱动程序的 SQLSetStmtAttr 函数。
SQL_ATTR_ASYNC_ENABLE (ODBC 3.0) 一个 SQLULEN 值,该值指定是否异步执行对指定连接使用 语句调用的函数:

SQL_ASYNC_ENABLE_OFF = 禁用对默认) (语句操作的连接级别异步执行支持。

SQL_ASYNC_ENABLE_ON = 为语句操作启用连接级别异步执行支持。

无论具有SQL_ASYNC_MODE信息类型的 SQLGetInfo 返回SQL_AM_CONNECTION还是SQL_AM_STATEMENT,都可以设置此属性。
SQL_ATTR_AUTO_IPD (ODBC 3.0) 一个只读 SQLUINTEGER 值,该值指定是否支持在调用 SQLPrepare 后自动填充 IPD:

SQL_TRUE = 驱动程序支持在调用 SQLPrepare 后自动填充 IPD。

SQL_FALSE = 驱动程序不支持在调用 SQLPrepare 后自动填充 IPD。 不支持已准备语句的服务器将无法自动填充 IPD。

如果为SQL_ATTR_AUTO_IPD连接属性返回SQL_TRUE,则可以将语句属性SQL_ATTR_ENABLE_AUTO_IPD设置为打开或关闭 IPD 的自动填充。 如果SQL_FALSE SQL_ATTR_AUTO_IPD,则SQL_ATTR_ENABLE_AUTO_IPD不能设置为SQL_TRUE。 SQL_ATTR_ENABLE_AUTO_IPD 的默认值等于 SQL_ATTR_AUTO_IPD 的值。

此连接属性可由 SQLGetConnectAttr 返回,但不能由 SQLSetConnectAttr 设置。
SQL_ATTR_AUTOCOMMIT (ODBC 1.0) 一个 SQLUINTEGER 值,该值指定是使用自动提交模式还是手动提交模式:

SQL_AUTOCOMMIT_OFF = 驱动程序使用手动提交模式,应用程序必须使用 SQLEndTran 显式提交或回滚事务。

SQL_AUTOCOMMIT_ON = 驱动程序使用自动提交模式。 每个语句在执行后立即提交。 这是默认值。 当SQL_ATTR_AUTOCOMMIT设置为 SQL_AUTOCOMMIT_ON从手动提交模式更改为自动提交模式时,将提交连接上的任何打开事务。

有关详细信息,请参阅 提交模式重要: 某些数据源会删除访问计划,并在每次提交语句时关闭连接上所有语句的游标;自动提交模式可能会导致在执行每个非查询语句后或关闭查询的游标后发生此情况。 有关详细信息,请参阅 SQLGetInfo 中的SQL_CURSOR_COMMIT_BEHAVIOR和SQL_CURSOR_ROLLBACK_BEHAVIOR信息类型以及 事务对游标和已准备语句的影响

在自动提交模式下执行批处理时,有两种可能。 可将整个批处理视为可自动提交的单元,或者将批处理中的每个语句视为可自动提交的单元。 某些数据源可以同时支持这两种行为,并可能提供一种选择其中一种行为的方法。 它是由驱动程序定义的,是将批处理视为可自动提交的单元,还是批处理中的每个单独语句是否可自动提交。
SQL_ATTR_CONNECTION_DEAD

(ODBC 3.5)
指示连接状态的只读 SQLUINTEGER 值。 如果SQL_CD_TRUE,则连接已丢失。 如果SQL_CD_FALSE,则连接仍处于活动状态。
SQL_ATTR_CONNECTION_TIMEOUT (ODBC 3.0) 一个 SQLUINTEGER 值,该值对应于在返回应用程序之前等待连接上的任何请求完成的秒数。 在与查询执行或登录无关的情况下,驱动程序应返回 SQLSTATE HYT00 (超时已过期) 。

如果 ValuePtr 等于 0 (默认) ,则没有超时。
SQL_ATTR_CURRENT_CATALOG (ODBC 2.0) 包含数据源要使用的目录名称的字符串。 例如,在 SQL Server 中,目录是数据库,因此驱动程序将 USEdatabase 语句发送到数据源,其中 database 是 *ValuePtr 中指定的数据库。 对于单层驱动程序,目录可能是一个目录,因此驱动程序将其当前目录更改为 *ValuePtr 中指定的目录。
SQL_ATTR_DBC_INFO_TOKEN (ODBC 3.8 SQLRateConnection 的 (*pRating) 参数不等于 100 时,用于将连接信息令牌设置回 DBC 句柄的 SQLPOINTER 值。

SQL_ATTR_DBC_INFO_TOKEN是仅设置的。 不能使用 SQLGetConnectAttrSQLGetConnectOption 来检索此值。 驱动程序管理器的 SQLSetConnectAttr 不接受SQL_ATTR_DBC_INFO_TOKEN,因为应用程序不应设置此属性。

如果驱动程序在设置SQL_ATTR_DBC_INFO_TOKEN后返回SQL_ERROR,则将释放刚刚从池获取的连接。 然后,驱动程序管理器将尝试从池获取另一个连接。 有关详细信息,请参阅 在 ODBC 驱动程序中开发Connection-Pool感知
SQL_ATTR_ENLIST_IN_DTC (ODBC 3.0) 一个 SQLPOINTER 值,该值指定是否在由 Microsoft 组件服务协调的分布式事务中使用 ODBC 驱动程序。

传递一个 DTC OLE 事务对象,该对象指定要导出到SQL Server的事务,或SQL_DTC_DONE以结束连接的 DTC 关联。

客户端 (MS DTC) OLE ITransactionDispenser::BeginTransaction 方法调用 Microsoft 分布式事务处理协调器以启动 MS DTC 事务并创建表示该事务的 MS DTC 事务对象。 然后,应用程序使用 SQL_ATTR_ENLIST_IN_DTC 选项调用 SQLSetConnectAttr,以将事务对象与 ODBC 连接相关联。 将在 MS DTC 事务的保护下执行所有相关的数据库活动。 应用程序使用 SQL_DTC_DONE 调用 SQLSetConnectAttr 以结束连接的 DTC 关联。 有关详细信息,请参阅 MS DTC 文档。
SQL_ATTR_LOGIN_TIMEOUT (ODBC 1.0) 一个 SQLUINTEGER 值,该值对应于在返回到应用程序之前等待登录请求完成的秒数。 默认值与驱动程序相关。 如果 ValuePtr 为 0,则超时将被禁用,连接尝试将无限期等待。

如果指定的超时超过数据源中的最大登录超时,驱动程序将替换该值,并返回 SQLSTATE 01S02 (选项值更改) 。
SQL_ATTR_METADATA_ID (ODBC 3.0) 确定如何处理目录函数的字符串参数的 SQLUINTEGER 值。

如果SQL_TRUE,则目录函数的字符串参数被视为标识符。 情况并不重要。 对于未删除的字符串,驱动程序会删除任何尾随空格,并将字符串折叠为大写。 对于带分隔符的字符串,驱动程序会删除任何前导空格或尾随空格,并采用分隔符之间的任何内容。 如果其中一个参数设置为 null 指针,则该函数将返回SQL_ERROR,SQLSTATE HY009 (null 指针) 无效使用。

如果SQL_FALSE,则不会将目录函数的字符串参数视为标识符。 此情况十分严重。 它们可以包含字符串搜索模式,也可以不包含字符串搜索模式,具体取决于 参数。

默认值为 SQL_FALSE。

采用值列表的 SQLTablesTableType 参数不受此属性的影响。

也可以在语句级别设置SQL_ATTR_METADATA_ID。 (是唯一也是语句 attribute 的连接属性。)

有关详细信息,请参阅 目录函数中的参数
SQL_ATTR_ODBC_CURSORS (ODBC 2.0) 指定驱动程序管理器如何使用 ODBC 游标库的 SQLULEN 值:

SQL_CUR_USE_IF_NEEDED = 驱动程序管理器仅在需要时使用 ODBC 游标库。 如果驱动程序支持 SQLFetchScroll 中的 SQL_FETCH_PRIOR 选项,则驱动程序管理器将使用驱动程序的滚动功能。 否则,它使用 ODBC 游标库。

SQL_CUR_USE_ODBC = 驱动程序管理器使用 ODBC 游标库。

SQL_CUR_USE_DRIVER = 驱动程序管理器使用驱动程序的滚动功能。 这是默认设置。

有关 ODBC 游标库的详细信息,请参阅 附录 F:ODBC 游标库警告: 游标库将在未来版本的 Windows 中删除。 避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。 Microsoft 建议使用驱动程序的游标功能。
SQL_ATTR_PACKET_SIZE (ODBC 2.0) 指定网络数据包大小的 SQLUINTEGER 值(以字节为单位)。 注意: 许多数据源要么不支持此选项,要么只能返回但不能设置网络数据包大小。

如果指定的大小超过最大数据包大小或小于最小数据包大小,驱动程序将替换该值并返回 SQLSTATE 01S02 (选项值更改) 。

如果应用程序在建立连接后设置数据包大小,驱动程序将返回 SQLSTATE HY011 (属性现在无法设置) 。
SQL_ATTR_QUIET_MODE (ODBC 2.0) (HWND) 的窗口句柄。

如果窗口句柄为 null 指针,则驱动程序不会显示任何对话框。

如果窗口句柄不是空指针,则它应该是应用程序的父窗口句柄。 这是默认值。 驱动程序使用此句柄显示对话框。 注意: SQL_ATTR_QUIET_MODE连接属性不适用于 SQLDriverConnect 显示的对话框。
SQL_ATTR_TRACE (ODBC 1.0) 指示驱动程序管理器是否执行跟踪的 SQLUINTEGER 值:

SQL_OPT_TRACE_OFF = (默认) 进行跟踪

SQL_OPT_TRACE_ON = 跟踪时间

启用跟踪后,驱动程序管理器会将每个 ODBC 函数调用写入跟踪文件。 注意: 启用跟踪后,驱动程序管理器可以从任何函数) 返回 SQLSTATE IM013 (跟踪文件错误。

应用程序使用 SQL_ATTR_TRACEFILE 选项指定跟踪文件。 如果文件已存在,驱动程序管理器将追加到该文件。 否则,它会创建 文件。 如果跟踪处于启用且未指定跟踪文件,驱动程序管理器将写入文件 SQL。根目录中的日志。

应用程序可以设置变量 ODBCSharedTraceFlag 以动态启用跟踪。 然后,为当前运行的所有 ODBC 应用程序启用跟踪。 如果应用程序关闭跟踪,则只会为该应用程序关闭跟踪。

如果当应用程序使用 handleType 为 SQL_HANDLE_ENV 调用 SQLAllocHandle 时,系统信息中的 Trace 关键字设置为 1,则为所有句柄启用跟踪。 它仅对调用 SQLAllocHandle 的应用程序启用。

调用属性为 SQL_ATTR_TRACE 的 SQLSetConnectAttr 不要求 ConnectionHandle 参数有效,并且如果 ConnectionHandle 为 NULL,则不会返回SQL_ERROR。 此属性适用于所有连接。
SQL_ATTR_TRACEFILE (ODBC 1.0) 一个以 null 结尾的字符串,其中包含跟踪文件的名称。

SQL_ATTR_TRACEFILE 属性的默认值是使用系统信息中的 TraceFile 关键字指定的。 有关详细信息,请参阅 ODBC 子项

调用属性为 SQL_ATTR_TRACEFILE 的 SQLSetConnectAttr 不需要 ConnectionHandle 参数有效,并且如果 ConnectionHandle 无效,则不会返回SQL_ERROR。 此属性适用于所有连接。
SQL_ATTR_TRANSLATE_LIB (ODBC 1.0) 以 null 结尾的字符串,其中包含库的名称,该库包含函数 SQLDriverToDataSourceSQLDataSourceToDriver ,驱动程序访问这些函数以执行字符集转换等任务。 仅当驱动程序已连接到数据源时,才能指定此选项。 此属性的设置将在连接之间保留。 有关转换数据的详细信息,请参阅 翻译 DLL转换 DLL 函数参考
SQL_ATTR_TRANSLATE_OPTION (ODBC 1.0) 传递给转换 DLL 的 32 位标志值。 仅当驱动程序已连接到数据源时,才能指定此属性。 有关转换数据的信息,请参阅 翻译 DLL
SQL_ATTR_TXN_ISOLATION (ODBC 1.0) 一个 32 位位掩码,用于设置当前连接的事务隔离级别。 在使用此选项调用 SQLSetConnectAttr 之前,应用程序必须调用 SQLEndTran 以提交或回滚连接上所有打开的事务。

可以通过调用 InfoType 等于 SQL_TXN_ISOLATION_OPTIONS 的 SQLGetInfo 来确定 ValuePtr 的有效值。

有关事务隔离级别的说明,请参阅 SQLGetInfo事务隔离级别中SQL_DEFAULT_TXN_ISOLATION信息类型的说明。

[1] 仅当描述符是实现描述符而不是应用程序描述符时,才能异步调用这些函数。

代码示例

请参阅 SQLConnect

有关以下方面的信息 请参阅
分配句柄 SQLAllocHandle 函数
返回连接属性的设置 SQLGetConnectAttr 函数

另请参阅

ODBC API 参考
ODBC 头文件