SQLSetConnectAttr — 设置连接属性

时间:2021-11-10 17:17:08
用途

SQLSetConnectAttr() 设置特定连接的连接属性。

语法

SQLRETURN SQLSetConnectAttr  (SQLHDBC     hdbc,
SQLINTEGER fAttr,
SQLPOINTER vParam,
SQLINTEGER sLen);

函数自变量

表 146. SQLSetConnectAttr 自变量

数据类型 自变量 使用 描述
SQLHDBC hdbc 输入 连接句柄
SQLINTEGER fAttr 输入 要设置的连接属性,有关更多信息,请参考表 147
SQLPOINTER vParam 输入 fAttr 相关联的值。根据选项的不同,这可以是指向 32 位整数值的指针,也可以是字符串。
SQLINTEGER sLen 输入 如果输入值是字符串的话,此自变量就是它的长度;否则不使用此自变量。

用法

通过 SQLSetConnectAttr() 设置的所有连接和语句选项都将持续到调用 SQLFreeConnect() 或下次调用SQLSetConnectAttr() 时为止。

通过 vParam 设置的信息的格式取决于所指定的 fAttr。选项信息可以是 32 位整数,也可以是指向以空终止的字符串的指针。

表 147. 连接选项

fAttr 内容
SQL_ATTR_AUTOCOMMIT 32 位的值,它设置连接的落实行为。可能的值列示如下:
  • SQL_TRUE — 在执行 SQL 语句时自动落实每个 SQL 语句。
  • SQL_FALSE — 不自动落实 SQL 语句。如果在具有落实控制的环境下运行,则必须使用 SQLEndTran()SQLTransact() 来显式地落实或回滚更改。
SQL_ATTR_COMMIT

SQL_TXN_ISOLATION
32 位的值,它设置hdbc 所引用的当前连接的事务隔离级别。DB2 UDB CLI 接受下列值,但每个服务器都可能只支持这些隔离级别的其中某一些:
  • SQL_TXN_NO_COMMIT — 未使用落实控制。
  • SQL_TXN_READ_UNCOMMITTED — 脏读取、不可重复读取和幻象读取是有可能的。
  • SQL_TXN_READ_COMMITTED — 脏读取是不可能的。不可重复读取和幻象读取是有可能的。
  • SQL_TXN_REPEATABLE_READ — 脏读取和不可重复读取是不可能的。幻象读取是有可能的。
  • SQL_TXN_SERIALIZABLE — 事务是可序列化的。脏读取、不可重复读取和幻象都是不可能的。

在 IBM 术语中:

  • SQL_TXN_READ_UNCOMMITTED 是指“未落实的读取”;
  • SQL_TXN_READ_COMMITTED 是指“游标稳定性”;
  • SQL_TXN_REPEATABLE_READ 是指“读取稳定性”;
  • SQL_TXN_SERIALIZABLE 是指“可重复读取”。

有关“隔离级别”的详细说明,请参考 IBM SQL Reference。

应该在调用 SQLConnect() 之前设置 SQL_ATTR_COMMIT 属性。如果在建立连接之后更改了值,并且该连接是与远程数据源的连接,则在下一次对连接句柄成功调用SQLConnect() 之前,此更改不会生效。

SQL_ATTR_DATE_FMT 32 位的整数值,这个值可以是:
  • SQL_FMT_ISO — 使用“国际标准化组织”(ISO)日期格式 yyyy-mm-dd。这是缺省值。
  • SQL_FMT_USA — 使用美国日期格式 mm/dd/yyyy。
  • SQL_FMT_EUR — 使用欧洲日期格式 dd.mm.yyyy。
  • SQL_FMT_JIS — 使用“日本工业标准”日期格式 yyyy-mm-dd。
  • SQL_FMT_MDY — 使用日期格式 mm/dd/yyyy。
  • SQL_FMT_DMY — 使用日期格式 dd/mm/yyyy。
  • SQL_FMT_YMD — 使用日期格式 yy/mm/dd。
  • SQL_FMT_JUL — 使用儒略日期格式 yy/ddd。
  • SQL_FMT_JOB — 使用作业缺省值。
SQL_ATTR_DATE_SEP 32 位的整数值,这个值可以是:
  • SQL_SEP_SLASH — 使用斜杠(/)作为日期分隔符。这是缺省值。
  • SQL_SEP_DASH — 使用破折号(-)作为日期分隔符。
  • SQL_SEP_PERIOD — 使用句点(.)作为日期分隔符。
  • SQL_SEP_COMMA — 使用逗号(,)作为日期分隔符。
  • SQL_SEP_BLANK — 使用空格作为日期分隔符。
  • SQL_SEP_JOB — 使用作业缺省值。
SQL_ATTR_DBC_DEFAULT_LIB 一个字符值,这个值指示将用于解析未限定文件引用的缺省库。如果连接正在使用系统命名方式,则此项无效。
SQL_ATTR_DBC_SYS_NAMING 32 位的整数值,这个值可以是:
  • SQL_TRUE — DB2 UDB CLI 使用 iSeries 系统命名方式。使用斜杠(/)定界符来限定文件。使用作业的库列表来解析未限定的文件。
  • SQL_FALSE — DB2 UDB CLI 使用缺省命名方式,即 SQL 命名。使用句点(.)定界符来限定文件。使用缺省库或当前用户标识来解析未限定的文件。
SQL_ATTR_DECIMAL_SEP 32 位的整数值,这个值可以是:
  • SQL_SEP_PERIOD — 使用句点(.)作为小数分隔符。这是缺省值。
  • SQL_SEP_COMMA — 使用逗号(,)作为日期分隔符。
  • SQL_SEP_JOB — 使用作业缺省值。
SQL_ATTR_EXTENDED_COL_INFO 32 位的整数值,这个值可以是:
  • SQL_TRUE — 可以在 SQLColAttributes() 上使用对此连接句柄分配的语句句柄来检索扩展的列信息,如“基本表”、“基本模式”、“基本列”和“标号”。
  • SQL_FALSE — 不能在 SQLColAttributes() 函数上使用对此连接句柄分配的语句句柄来检索扩展的列信息。这是缺省值。
SQL_ATTR_TIME_FMT 32 位的整数值,这个值可以是:
  • SQL_FMT_ISO — 使用“国际标准化组织”(ISO)时间格式 hh.mm.ss。这是缺省值。
  • SQL_FMT_USA — 使用美国时间格式 hh:mmxx,其中 xx 是 AM 或 PM。
  • SQL_FMT_EUR — 使用欧洲时间格式 hh.mm.ss。
  • SQL_FMT_JIS — 使用“日本工业标准”时间格式 hh:mm:ss。
  • SQL_FMT_HMS — 使用 hh:mm:ss 格式。
SQL_ATTR_TIME_SEP 32 位的整数值,这个值可以是:
  • SQL_SEP_COLON — 使用冒号(:)作为时间分隔符。这是缺省值。
  • SQL_SEP_PERIOD — 使用句点(.)作为时间分隔符。
  • SQL_SEP_COMMA — 使用逗号(,)作为时间分隔符。
  • SQL_SEP_BLANK — 使用空格作为时间分隔符。
  • SQL_SEP_JOB — 使用作业缺省值。
SQL_SAVEPOINT_NAME 一个字符值,它指示SQLEndTran() 要对函数 SQL_SAVEPOINT_NAME_ROLLBACK 或 SQL_SAVEPOINT_NAME_RELEASE 使用的保存点名称。
SQL_2ND_LEVEL_TEXT 32 位的整数值,这个值可以是:
  • SQL_TRUE — 通过调用 SQLError() 获取的错误文本将包含关于错误的完整文本描述。
  • SQL_FALSE — 通过调用 SQLError() 获取的错误文本将只包含关于错误的第一个级别的描述。这是缺省值。

返回码

  • SQL_SUCCESS
  • SQL_SUCCESS_WITH_INFO
  • SQL_ERROR
  • SQL_INVALID_HANDLE

诊断

表 148. SQLSetConnectAttr SQLSTATE

SQLSTATE 描述 说明
HY001 内存分配失败 驱动程序无法分配支持此函数的执行或完成所必需的内存。
HY009 自变量值无效 给定fAttr 值,对自变量vParam 指定了无效的值。

指定了无效的 fAttr 值。


http://publib.boulder.ibm.com/iseries/v5r2/ic2989/index.htm?info/cli/rzadpmst99.htm