SQLSetConnectAttr 函数

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

总结
SQLSetConnectAttr 设置控制连接方面的属性。

注意

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

语法

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

参数

ConnectionHandle
[输入] 连接句柄。

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

ValuePtr
[输入]指向要与 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(length) 宏的结果置于 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 of 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。 *MessageText 缓冲区中 SQLGetDiagRec 返回的错误消息描述错误及其原因。
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) 为参数 特性 指定的值对驱动程序支持的 ODBC 版本无效。

(DM) 为参数 Attribute 指定的值为只读属性。
HY114 驱动程序不支持连接级异步函数执行 (DM) 应用程序尝试为不支持异步连接操作的驱动程序启用SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE异步函数执行。
HY117 连接因未知事务状态而挂起。 仅允许断开连接和只读函数。 (DM) 有关挂起状态的详细信息,请参阅 SQLEndTran 函数
HY121 游标库和驱动程序感知池不能同时启用 有关详细信息,请参阅识别驱动程序的连接池
HYC00 未实现可选功能 为参数 特性 指定的值是驱动程序支持的 ODBC 版本的有效 ODBC 连接或语句属性,但驱动程序不支持。
HYT01 超过连接超时时间 在数据源响应请求之前,连接超时期限已过期。 连接超时期限通过 SQLSetConnectAttr 设置,SQL_ATTR_CONNECTION_TIMEOUT。
IM001 驱动程序不支持此函数 (DM) 与 ConnectionHandle 关联的驱动程序不支持该函数。
IM009 无法加载翻译 DLL 驱动程序无法加载为连接指定的转换 DLL。 仅当属性SQL_ATTR_TRANSLATE_LIB时,才能返回此错误。
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 映射

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

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

属性 在连接之前或之后设置?
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(选项值已更改)。 例如,如果 属性 SQL_ATTR_PACKET_SIZE且 *ValuePtr 超过最大数据包大小,驱动程序将替换最大大小。 若要确定替换的值,应用程序将调用 SQLGetConnectAttr

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

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

*ValuePtr 缓冲区中设置的信息格式取决于指定的 属性SQLSetConnectAttr 将接受以下两种不同格式之一的属性信息:以 null 结尾的字符串或整数值。 属性的说明中记录了每个格式。 SQLSetConnectAttr 的 ValuePtr 参数指向字符串长度为 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_ATTR_AUTO_IPD SQL_FALSE,则无法将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 中,目录是一个数据库,因此驱动程序会将 USE 数据库语句发送到数据源,其中数据库是 *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 驱动程序 中的“开发连接池感知”。
SQL_ATTR_ENLIST_IN_DTC (ODBC 3.0) 一个 SQLPOINTER 值,该值指定是否在Microsoft组件服务协调的分布式事务中使用 ODBC 驱动程序。

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

客户端调用 Microsoft 分布式事务处理协调器 (MS DTC) OLE ITransactionDispenser::BeginTransaction 方法以开始 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。 (它是也是语句属性的唯一连接属性。

有关详细信息,请参阅目录函数中的参数
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 指针,驱动程序不会显示任何对话框。

如果窗口句柄不是 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。根目录中的 LOG。

应用程序可以设置变量 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 头文件