#SQLSetDescField

# 函数用途

设置单个描述符字段。

# ODBC函数原型

SQLRETURN SQLSetDescField(  
     SQLHDESC      DescriptorHandle,  
     SQLSMALLINT   RecNumber,  
     SQLSMALLINT   FieldIdentifier,  
     SQLPOINTER    ValuePtr,  
     SQLINTEGER    BufferLength);

# 参数说明

FieldIdentifier支持情况:

不在列表中的参数不支持,同时已做拦截处理。

# ARD

字段属性 FieldIdentifier 支持情况 值说明
header SQL_DESC_ARRAY_SIZE 支持 等价于SQLSetStmtAttr的SQL_ATTR_ROW_ARRAY_SIZE
header SQL_DESC_BIND_TYPE 支持 仅支持SQL_BIND_BY_COLUMN
record SQL_DESC_CONCISE_TYPE 支持
record SQL_DESC_DATA_PTR 支持
record SQL_DESC_DATETIME_INTERVAL_CODE 支持 返回结果根据C Type决定
switch (*bindCType) {
case SQL_DATETIME:
case SQL_INTERVAL:
case SQL_C_TYPE_DATE:
case SQL_C_TYPE_TIME:
case SQL_C_TYPE_TIMESTAMP:
case SQL_C_INTERVAL_DAY_TO_SECOND:
case SQL_C_INTERVAL_YEAR_TO_MONTH:
switch (value) {
case SQL_CODE_DATE:
*bindCType = SQL_C_TYPE_DATE;
case SQL_CODE_TIME:
*bindCType = SQL_C_TYPE_TIME;
case SQL_CODE_TIMESTAMP:
*bindCType = SQL_C_TYPE_TIMESTAMP;
case SQL_CODE_DAY_TO_SECOND:
*bindCType = SQL_C_INTERVAL_DAY_TO_SECOND;
case SQL_CODE_YEAR_TO_MONTH:
*bindCType = SQL_C_INTERVAL_YEAR_TO_MONTH;
default:
break;
}
default:
break;
}
record SQL_DESC_INDICATOR_PTR 支持
record SQL_DESC_OCTET_LENGTH 支持
record SQL_DESC_PRECISION 支持
record SQL_DESC_SCALE 支持
record SQL_DESC_TYPE 支持 等价于SQL_DESC_CONCISE_TYPE

# APD

字段属性 FieldIdentifier 支持情况 值说明
header SQL_DESC_ARRAY_SIZE 支持 等价于SQLSetStmtAttr的SQL_ATTR_PARAMSET_SIZE
header SQL_DESC_BIND_TYPE 支持 仅支持SQL_BIND_BY_COLUMN
record SQL_DESC_CONCISE_TYPE 支持
record SQL_DESC_DATA_PTR 支持
record SQL_DESC_DATETIME_INTERVAL_CODE 支持 返回结果根据C Type决定
switch (*bindCType) {
case SQL_DATETIME:
case SQL_INTERVAL:
case SQL_C_TYPE_DATE:
case SQL_C_TYPE_TIME:
case SQL_C_TYPE_TIMESTAMP:
case SQL_C_INTERVAL_DAY_TO_SECOND:
case SQL_C_INTERVAL_YEAR_TO_MONTH:
switch (value) {
case SQL_CODE_DATE:
*bindCType = SQL_C_TYPE_DATE;
case SQL_CODE_TIME:
*bindCType = SQL_C_TYPE_TIME;
case SQL_CODE_TIMESTAMP:
*bindCType = SQL_C_TYPE_TIMESTAMP;
case SQL_CODE_DAY_TO_SECOND:
*bindCType = SQL_C_INTERVAL_DAY_TO_SECOND;
case SQL_CODE_YEAR_TO_MONTH:
*bindCType = SQL_C_INTERVAL_YEAR_TO_MONTH;
default:
break;
}
default:
break;
}
record SQL_DESC_INDICATOR_PTR 支持
record SQL_DESC_OCTET_LENGTH 支持
record SQL_DESC_PRECISION 支持
record SQL_DESC_SCALE 支持
record SQL_DESC_TYPE 支持 等价于SQL_DESC_CONCISE_TYPE

# IRD

字段属性 FieldIdentifier 支持情况 值说明
header SQL_DESC_ROWS_PROCESSED_PTR 支持 等价于SQLSetStmtAttr的SQL_ATTR_ROWS_FETCHED_PTR

# IPD

字段属性 FieldIdentifier 支持情况 值说明
record SQL_DESC_DATA_PTR 不支持 不是用于设置该字段,唯一作用是触发一致性检查
record SQL_DESC_PARAMETER_TYPE 支持 仅支持SQL_PARAM_INPUT和SQL_PARAM_OUTPUT
默认值:SQL_PARAM_INPUT

# 错误码说明

无特殊说明。

# 其他说明

设置描述符字段序列顺序

通过调用 SQLSetDescField 设置描述符字段时,应用程序必须遵循特定的序列:

  1. 应用程序必须首先设置SQL_DESC_TYPE、SQL_DESC_CONCISE_TYPE或SQL_DESC_DATETIME_INTERVAL_CODE字段。
  2. 设置其中一个字段后,应用程序可以设置数据类型的属性,驱动程序会将数据类型属性字段设置为数据类型的相应默认值。 自动默认类型属性字段可确保在应用程序指定数据类型后,描述符始终可供使用。 如果应用程序显式设置数据类型属性,则会重写默认属性。
  3. 设置步骤 1 中列出的其中一个字段并设置数据类型属性后,应用程序可以设置SQL_DESC_DATA_PTR。 这会提示对描述符字段进行一致性检查。 如果应用程序在设置SQL_DESC_DATA_PTR字段后更改数据类型或属性,驱动程序会将SQL_DESC_DATA_PTR设置为 null 指针,取消绑定记录。 这会强制应用程序在描述符记录可用之前按顺序完成正确的步骤。

如果应用程序调用SQLSetDescField来设置除SQL_DESC_COUNT以外的任何字段或延迟字段SQL_DESC_DATA_PTR、SQL_DESC_OCTET_LENGTH_PTR或SQL_DESC_INDICATOR_PTR,则记录将变为未绑定。

总结说明

1.目前SQL_DESC_OCTET_LENGTH_PTR字段不支持,内部等价于SQL_DESC_INDICATOR_PTR字段。

2.设置除SQL_DESC_DATA_PTR、SQL_DESC_INDICATOR_PTR外的记录字段,记录将变为未绑定,SQL_DESC_DATA_PTR将被设为NULL。