#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 设置描述符字段时,应用程序必须遵循特定的序列:
- 应用程序必须首先设置SQL_DESC_TYPE、SQL_DESC_CONCISE_TYPE或SQL_DESC_DATETIME_INTERVAL_CODE字段。
- 设置其中一个字段后,应用程序可以设置数据类型的属性,驱动程序会将数据类型属性字段设置为数据类型的相应默认值。 自动默认类型属性字段可确保在应用程序指定数据类型后,描述符始终可供使用。 如果应用程序显式设置数据类型属性,则会重写默认属性。
- 设置步骤 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。