Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


接口参考

📄字数 18.2K
👁️阅读量 加载中...

数据类型

XGCI 在发送数据时需将 C 语言中的值类型转换为数据库中的值类型。在参数绑定时,需要指定被绑定变量值的类型,还需指定对应列的类型,但两种类型并非需要严格对应,部分类型间可完成数值类型转换。

C 语言类型

  • XG_C_BOOL
  • XG_C_CHAR
  • XG_C_TINYINT
  • XG_C_SHORT
  • XG_C_INTEGER
  • XG_C_BIGINT
  • XG_C_FLOAT
  • XG_C_DOUBLE
  • XG_C_NUMERIC
  • XG_C_DATE
  • XG_C_TIME
  • XG_C_TIME_TZ
  • XG_C_DATETIME
  • XG_C_DATETIME_TZ
  • XG_C_BINARY
  • XG_C_INTERVAL
  • XG_C_INTERVAL_YEAR_TO_MONTH
  • XG_C_INTERVAL_DAY_TO_SECOND
  • XG_C_TIMESTAMP
  • XG_C_LOB

SQL 类型

  • SQL_BOOL
  • SQL_TINYINT
  • SQL_SMALLINT
  • SQL_INTEGER
  • SQL_BIGINT
  • SQL_FLOAT
  • SQL_DOUBLE
  • SQL_NUMERIC
  • SQL_DATE
  • SQL_TIME
  • SQL_DATETIME
  • SQL_CHAR
  • SQL_BINARY
  • SQL_CLOB
  • SQL_IMAGE
  • SQL_BLOB
  • SQL_INTERVAL_YEAR
  • SQL_INTERVAL_MONTH
  • SQL_INTERVAL_DAY
  • SQL_INTERVAL_HOUR
  • SQL_INTERVAL_MINUTE
  • SQL_INTERVAL_SECOND
  • SQL_INTERVAL_YEAR_TO_MONTH
  • SQL_INTERVAL_DAY_TO_SECOND
  • SQL_INTERVAL_DAY_TO_HOUR
  • SQL_INTERVAL_DAY_TO_MINUTE
  • SQL_INTERVAL_HOUR_TO_MINUTE
  • SQL_INTERVAL_HOUR_TO_SECOND
  • SQL_INTERVAL_MINUTE_TO_SECOND
  • SQL_TIMESTAMP

API 接口

XGCI 中除了 XGCILobCreate 接口外,其他接口的返回值均为错误码。返回值不为 XGCI_SUCCESS 时,可使用 XGCIErrors 获取错误信息。所有接口描述的示例中,为了减少不必要的细节,凸显接口的使用方法,均不对接口的返回值进行判断和处理。

XGCIHandleAlloc

功能

创建句柄。

原型

C
XGCIRETURN XG_API XGCIHandleAlloc(XGCIHANDLE parenthndp, XGCIHANDLE* hndlpp, HANDLE_TYPE type);

参数

  • parenthndp:父句柄
  • hndlpp:待创建的句柄
  • type:待创建的句柄类型,可取值:
    • HT_ENV
    • HT_SERVER
    • HT_SESSION
    • HT_CONNPOOL
    • HT_STATEMENT

说明

  • 创建环境句柄(HT_ENV)时,父句柄传入 NULL
  • 创建服务器句柄(HT_SERVER)时,父句柄传入环境句柄
  • 创建会话句柄(HT_SESSION)时,父句柄传入服务器句柄
  • 创建连接池句柄(HT_CONNPOOL)时,父句柄传入环境句柄
  • 创建语句句柄(HT_STATEMENT)时,父句柄传入会话句柄

示例

C
XGCIHANDLE henv;
XGCIHANDLE hserver;
XGCIHANDLE hsession;
XGCIHANDLE hstmt;

// 创建环境句柄
XGCIHandleAlloc(NULL, &henv, HT_ENV);
// 创建服务器句柄
XGCIHandleAlloc(henv, &hserver, HT_SERVER);
// 创建会话句柄
XGCIHandleAlloc(hserver, &hsession, HT_SESSION);
// 创建语句句柄
XGCIHandleAlloc(hsession, &hstmt, HT_STATEMENT);

XGCIHandleFree

功能

销毁句柄。

原型

C
XGCIRETURN XG_API XGCIHandleFree(XGCIHANDLE hndp);

参数

  • hndp:待销毁的句柄

说明

同一句柄不可重复销毁。

示例

C
XGCIHandleFree(hstmt);
XGCISessionEnd(hsession);
XGCIHandleFree(hserver);
XGCIHandleFree(henv);

XGCIHandleAttrSet

功能

为句柄设置属性值。

原型

C
XGCIRETURN XG_API XGCIHandleAttrSet(XGCIHANDLE hndp, int32 Attribute, const void* ValuePtr, int32 BuffLen);

参数

  • hndp:句柄
  • Attribute:属性类型
  • ValuePtr:属性值
  • BuffLen:属性值的长度

说明

当 ValuePtr 传入字符串时,BuffLen 可传入 XGCI_NTS。传入 XGCI_NTS 与传入 strlen(ValuePtr) 效果相同。ValuePtr 为数值型时,不使用参数 BuffLen。

  • 环境句柄
    • XGCI_ATTR_ENV_VERSION:版本号,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_ENV_USE_POOL:是否启用连接池,ValuePtr 为 int32 的变量地址,变量取值非零为 true,零为 false
  • 服务器句柄
    • XGCI_ATTR_SRV_IP:IP 地址,ValuePtr 为字符串
    • XGCI_ATTR_SRV_PORT:端口,ValuePtr 为 uint16 的变量地址
    • XGCI_ATTR_SRV_URL:域名,ValuePtr 为字符串
    • XGCI_ATTR_SRV_DBNAME:库名,ValuePtr 为字符串
    • XGCI_ATTR_SRV_TURN_IPS:分号分隔的多个 IP,ValuePtr 为字符串
  • 会话句柄
    • XGCI_ATTR_SESS_VERSION:通信协议版本,ValuePtr 为字符串,取值 201 或 301
    • XGCI_ATTR_SESS_TIMEZONE:时区,ValuePtr 为字符串
    • XGCI_ATTR_SESS_ENCRYPTOR:数据解密口令,ValuePtr 为字符串
    • XGCI_ATTR_SESS_CHARSET:字符编码,ValuePtr 为 int32 的变量地址,变量取值为 XGCI_CHARSET_GBK、XGCI_CHARSET_GB2312 或 XGCI_CHARSET_UTF8
    • XGCI_ATTR_SESS_ISOLEVEL:隔离级别,ValuePtr 为 int32 的变量地址,变量取值为 XGCI_ISO_READONLY、XGCI_ISO_READCOMMIT、XGCI_ISO_READREPEAT 或 XGCI_ISO_SERIAL
    • XGCI_ATTR_SESS_SSL:是否开启加密传输,ValuePtr 为 int32 的变量地址,变量取值为 XGCI_USESSL_TRUE 或 XGCI_USESSL_FALSE
    • XGCI_ATTR_SESS_AUTO_COMMIT:是否开启自动提交,ValuePtr 为 int32 的变量地址,变量取值为 XGCI_AUTOCOMMIT_ON 或 XGCI_AUTOCOMMIT_OFF
    • XGCI_ATTR_SESS_TIMEOUT:收发数据超时时间,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_SESS_LOB_DESCRIBER:是否开启大对象描述符,ValuePtr 为 int32 的变量地址,非零为 true,零为 false
    • XGCI_ATTR_SESS_LOCKTIMEOUT:加锁超时,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_SESS_CURSORID_RET:是否返回游标 ID,ValuePtr 为 int32 的变量地址,变量取值非零为 true,零为 false
    • XGCI_ATTR_SESS_ROWID_RET:是否返回 ROWID,ValuePtr 为 int32 的变量地址,变量取值非零为 true,零为 false
    • XGCI_ATTR_SESS_SCHEMA_RET:是否返回模式名,ValuePtr 为 int32 的变量地址,变量取值非零为 true,零为 false
  • 语句句柄
    • XGCI_ATTR_STMT_PREPARE_WITH_SERVER_CURSOR:是否启用服务端游标,ValuePtr 为 int32 的变量地址,变量取值为 USE_NOT_SERVER_CUR、USE_SERVER_CURSOR 或 USE_SERVER_CURSOR_ASYNC

示例

C
unsigned short port = 5138;
XGCIHandleAttrSet(hserver, XGCI_ATTR_SRV_IP, "127.0.0.1", XGCI_NTS);
XGCIHandleAttrSet(hserver, XGCI_ATTR_SRV_PORT, &port, 0);
XGCIHandleAttrSet(hserver, XGCI_ATTR_SRV_DBNAME, "SYSTEM", XGCI_NTS);

XGCIHandleAttrGet

功能

从句柄中获取指定的属性值。

原型

C
XGCIRETURN XG_API XGCIHandleAttrGet(XGCIHANDLE hndp, int32 Attribute, void* ValuePtr, int32 BuffLen);

参数

  • hndp:句柄
  • Attribute:属性类型
  • ValuePtr:属性值
  • BuffLen:ValuePtr 的大小

说明

数值型属性不使用 BuffLen。字符型属性需指定 ValuePtr 的缓冲区大小,但 BuffLen 不可指定 XGCI_NTS,若 ValuePtr 太小,获取的属性值会被截断。

  • 环境句柄
    • XGCI_ATTR_ENV_VERSION:版本号,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_ENV_USE_POOL:是否开启连接池,ValuePtr 为 int32 的变量地址,非零为 true,零为 false
  • 服务器句柄
    • XGCI_ATTR_SRV_IP:IP 地址,ValuePtr 为字符数组
    • XGCI_ATTR_SRV_PORT:端口,ValuePtr 为 uint16 的变量地址
    • XGCI_ATTR_SRV_URL:域名,ValuePtr 为字符数组
    • XGCI_ATTR_SRV_DBNAME:库名,ValuePtr 为字符数组
  • 会话句柄
    • XGCI_ATTR_SESS_TIMEZONE:时区,ValuePtr 为字符数组
    • XGCI_ATTR_SESS_ENCRYPTOR:数据解密口令,ValuePtr 为字符数组
    • XGCI_ATTR_SESS_CHARSET:字符编码,ValuePtr 为 int32 的变量地址,取值为 XGCI_CHARSET_GBK、XGCI_CHARSET_GB2312 或 XGCI_CHARSET_UTF8
    • XGCI_ATTR_SESS_ISOLEVEL:隔离界别,ValuePtr 为 int32 的变量地址,取值为 XGCI_ISO_READONLY、XGCI_ISO_READCOMMIT、XGCI_ISO_READREPEAT 或 XGCI_ISO_SERIAL
    • XGCI_ATTR_SESS_SSL:是否开启传输加密,ValuePtr 为 int32 的变量地址,取值为 XGCI_USESSL_TRUE 或 XGCI_USESSL_FALSE
    • XGCI_ATTR_SESS_AUTO_COMMIT:是否开启自动提交,ValuePtr 为 int32 的变量地址,取值为 XGCI_AUTOCOMMIT_ON 或 XGCI_AUTOCOMMIT_OFF
    • XGCI_ATTR_SESS_TIMEOUT:收发数据超时时间,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_SESS_LOB_DESCRIBER:是否开启大对象描述符,ValuePtr 为 int32 的变量地址,非零为 true,零为 false
    • XGCI_ATTR_SESS_LOCKTIMEOUT:加锁超时时间,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_SESS_CURSORID_RET:是否返回游标 ID,ValuePtr 为 int32 的变量地址,非零为 true,零为 false
  • 语句句柄
    • XGCI_ATTR_COL_COUNT:结果集列个数,ValuePtr 为 uint32 的变量地址
    • XGCI_ATTR_ROW_COUNT:结果集行数,ValuePtr 为 uint64 的变量地址
    • XGCI_ATTR_EFFECT_NUM:受影响行数,ValuePtr 为 int32 的变量地址
    • XGCI_ATTR_RESULT_TYPE:结果集类型,ValuePtr 为 uint32 的变量地址,取值为 RESULT_UNKNOWN、RESULT_INSERT、RESULT_SELECT、RESULT_UPDATE 或 RESULT_DELETE
    • XGCI_ATTR_STMT_PREPARE_WITH_SERVER_CURSOR:是否启用服务端游标,ValuePtr 为 int32 的变量地址,取值为 USE_NOT_SERVER_CUR、USE_SERVER_CURSOR 或 USE_SERVER_CURSOR_ASYNC

示例

C
char ip[32];
unsigned short port;
XGCIHandleAttrGet(hserver, XGCI_ATTR_SRV_IP, ip, 32);
XGCIHandleAttrGet(hserver, XGCI_ATTR_SRV_PORT, &port, 0);

XGCISessionBegin

功能

登录数据库。

原型

C
XGCIRETURN XG_API XGCISessionBegin(XGCIHSESS sesshndp, char* puser, char* ppwd);

参数

  • sesshndp:会话句柄
  • puser:用户名
  • ppwd:密码

示例

C
int ret = XGCISessionBegin(hsession, (char*)"SYSDBA", (char*)"SYSDBA");
if(ret != XGCI_SUCCESS) {
    //XGCIErrors(...)
}

XGCISessionEnd

功能

登出数据库。

原型

C
XGCIRETURN XG_API XGCISessionEnd(XGCIHSESS sesshndp);

参数

  • sesshndp:会话句柄

示例

C
XGCISessionEnd(hsession);

XGCIExecDirect

功能

直接执行 SQL 语句。

原型

C
XGCIRETURN XG_API XGCIExecDirect(XGCIHSTMT hndlp, char* sql_str, int32 str_len);

参数

  • hndlp:语句句柄
  • sql_str:SQL 语句
  • str_len:SQL 语句的长度,可传入 XGCI_NTS

示例

C
const char* sql = "SELECT * FROM tab_test";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);

XGCIFetch

功能

获取结果集的下一行。

原型

C
XGCIRETURN XG_API XGCIFetch(XGCIHSTMT hndlp);

参数

  • 语句句柄。

说明

应成功执行查询语句后再调用此接口获取下一行数据。如何获取每个列的数据,请参考 XGCIDefineByPos

示例

C
const char* sql = "SELECT * FROM tab_test";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);
int ret;
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    //do something
}

XGCIDefineByPos

功能

将 C 语言的变量绑定至查询结果集的列,在调用 XGCIFetch 时,用当前行的列值填充被绑定的变量。

原型

C
XGCIRETURN XG_API XGCIDefineByPos(XGCIHSTMT Hndp, int32 ColNum, void* ValuePtr, int32 BuffSize, 
                                  int32 CType, int32* rCodep, int32* ActualLenp);

参数

  • Hndp:语句句柄
  • ColNum:列号,起始列号为 1
  • ValuePtr:被绑定的缓冲区地址
  • BuffSize:被绑定的缓冲区大小
  • CType:C 语言类型
  • rCodep:列的错误码
  • ActualLenp:列的大小

说明

定长类型(如:int、float等)不使用 BuffSize,rCodep 和 ActualLenp 可传 NULL。当数据发生截断时,*rCodep 的值为 XGCI_TRUNCATED_DATA,*ActualLenp 的值为剩余字节数。当字段的值无法转换为 CType 时,*rCodep 的值为 XGCI_DATATYPE_ERROR,*ActualLenp 的值为 0。

当列值为 null 时,*rCodep 为 -1,*ActualLenp 为 0。

示例

C
int id;
char no[20];
char name[20];
DATE_STRUCT date;
int rc[4];
int len[4];
XGCIDefineByPos(hstmt, 1, &id, 0, XG_C_INTEGER, &rc[0], &len[0]);
XGCIDefineByPos(hstmt, 2, no, 20, XG_C_CHAR, &rc[1], &len[1]);
XGCIDefineByPos(hstmt, 3, name, 20, XG_C_CHAR, &rc[2], &len[2]);
XGCIDefineByPos(hstmt, 4, &date, 0, XG_C_DATE, &rc[3], &len[3]);

XGCIPrepare

功能

Prepare 一个 SQL 语句用于参数绑定。

原型

C
XGCIRETURN XG_API XGCIPrepare(XGCIHSTMT hndlp, char* sql_str, int32 str_len);

参数

  • hndlp:语句句柄
  • sql_str:带占位符的 SQL 语句
  • str_len:sql_str 的长度

说明

SQL 语句中的占位符可用 ?:name。当使用 ? 时,绑定参数需使用 XGCIBindParamByPos。当使用 :name 时,绑定参数需使用 XGCIBindParamByName。

示例

C
const char* sql = "SELECT * FROM tab_test WHERE id = ?";
// or 
//const char* sql = "SELECT * FROM tab_test WHERE id = :id";
XGCIPrepare(hstmt, (char*)sql, XGCI_NTS);

XGCIBindParamByPos

功能

为用 ? 作为占位符的 SQL 语句绑定参数。

原型

C
XGCIRETURN XG_API XGCIBindParamByPos(XGCIHSTMT Hndp, int32 Position, PARAM_TYPE type, void* ValuePtr, int32 BuffSize, 
                                     int32 CType, int32* rCodep, int32* ActualLenp, int32 SqlType);

参数

  • Hndp:语句句柄
  • Position:参数的位置编号,从 1 开始
  • type:指定参数为输入或输出型参数,取值为:PARAM_IN、PARAM_OUT 或 PARAM_INOUT
  • ValuePtr:变量地址
  • BuffSize:变量缓冲区大小
  • CType:C 语言类型
  • rCodep:错误码,用于输出型参数
  • ActualLenp:参数值大小
  • SqlType:SQL 类型

说明

当 *ActualLenp 值小于等于 0 时,null 值将被绑定至对应参数。

定长类型不使用 ActualLenp,但 *ActualLenp 值小于等于 0 例外。对于变长类型(XG_C_BINARY、XG_C_CHAR 和 XG_C_LOB),当 ActualLenp 为 NULL时,XG_C_BINARY 的实际数据长度取值为 BuffSize,XG_C_CHAR 的实际数据长度取值为 strlen(ValuePtr),XG_C_LOB 的实际数据长度取值为 LOB 结构中的数据长度。

对于变长类型,当 *ActualLenp 大于 BuffSize 时,实际数据长度取值为 BuffSize。

示例

C
const char* sql = "INSERT INTO tab_test (id, name, created) values(?, ?, ?)";
XGCIPrepare(hstmt, (char*)sql, XGCI_NTS);

int id = 1;
char name[20] = "张三";
DATE_STRUCT date = { 2000, 1, 1 };
int len1 = 1; //定长类型,取值 > 0 即可
int len2 = strlen(name); //变长类型,取实际值
int len3 = 1; //定长类型,取值 > 0 即可
XGCIBindParamByPos(hstmt, 1, PARAM_IN, &id, 0, XG_C_INTEGER, NULL, &len1, SQL_INTEGER);
XGCIBindParamByPos(hstmt, 2, PARAM_IN, name, 20, XG_C_CHAR, NULL, &len2, SQL_CHAR);
XGCIBindParamByPos(hstmt, 3, PARAM_IN, &date, 0, XG_C_DATE, NULL, &len3, SQL_DATE);

XGCIBindParamByName

功能

为用形如 :name 作为占位符的 SQL 语句绑定参数。

原型

C
XGCIRETURN XG_API XGCIBindParamByName(XGCIHSTMT Hndp, char* Name, PARAM_TYPE IoType, void* ValuePtr, int32 BuffSize,
                                      int32 CType, int32* rCodep, int32* ActualLenp, int32 SqlType);

参数

  • Hndp:语句句柄
  • Name:参数名
  • IoType:指定参数为输入或输出型参数,取值为:PARAM_IN、PARAM_OUT 或 PARAM_INOUT
  • ValuePtr:变量地址
  • BuffSize:变量缓冲区大小
  • CType:C 语言类型
  • rCodep:错误码,用于输出型参数
  • ActualLenp:参数值大小
  • SqlType:SQL 类型

说明

当 *ActualLenp 值小于等于 0 时,null 值将被绑定至对应参数。

定长类型不使用 ActualLenp,但 *ActualLenp 值小于等于 0 例外。对于变长类型(XG_C_BINARY、XG_C_CHAR 和 XG_C_LOB),当 ActualLenp 为 NULL时,XG_C_BINARY 的实际数据长度取值为 BuffSize,XG_C_CHAR 的实际数据长度取值为 strlen(ValuePtr),XG_C_LOB 的实际数据长度取值为 LOB 结构中的数据长度。

对于变长类型,当 *ActualLenp 大于 BuffSize 时,实际数据长度取值为 BuffSize。

示例

C
const char* sql = "INSERT INTO tab_test (id, name, created) values(:id, :name, :created)";
XGCIPrepare(hstmt, (char*)sql, XGCI_NTS);

int id = 1;
char name[20] = "张三";
DATE_STRUCT date = { 2000, 1, 1 };
int len1 = 1; //定长类型,取值 > 0 即可
int len2 = strlen(name); //变长类型,取实际值
int len3 = 1; //定长类型,取值 > 0 即可
XGCIBindParamByName(hstmt, (char*)"id", PARAM_IN, &id, 0, XG_C_INTEGER, NULL, &len1, SQL_INTEGER);
XGCIBindParamByName(hstmt, (char*)"name", PARAM_IN, name, 20, XG_C_CHAR, NULL, &len2, SQL_CHAR);
XGCIBindParamByName(hstmt, (char*)"created", PARAM_IN, &date, 0, XG_C_DATE, NULL, &len3, SQL_DATE);

XGCIExecute

功能

发送参数并执行 SQL 语句。

原型

C
XGCIRETURN XG_API XGCIExecute(XGCIHSTMT hndlp);

参数

  • hndlp:语句句柄

说明

调用 XGCIExecute 时,需先成功调用 XGCIPrepare 且绑定参数。当参数绑定之后,可多次修改被绑定变量的值并调用 XGCIExecute。

示例

C
const char* sql = "INSERT INTO tab_test (id, name, created) values(:id, :name, :created)";
XGCIPrepare(hstmt, (char*)sql, XGCI_NTS);

int id;
char name[20];
DATE_STRUCT date = { 2000, 1, 1 };
int len1 = 1;
int len2 = 0;
int len3 = 1;
XGCIBindParamByName(hstmt, (char*)"id", PARAM_IN, &id, 0, XG_C_INTEGER, NULL, &len1, SQL_INTEGER);
XGCIBindParamByName(hstmt, (char*)"name", PARAM_IN, name, 20, XG_C_CHAR, NULL, &len2, SQL_CHAR);
XGCIBindParamByName(hstmt, (char*)"created", PARAM_IN, &date, 0, XG_C_DATE, NULL, &len3, SQL_DATE);

// insert 10 rows
for(int i = 1; i <= 10; i++) {
    id = i;
    len2 = sprintf(name, "张三%d", i);
    date.day = i;
    XGCIExecute(hstmt);
}

XGCIFreeStmt

功能

释放语句句柄中通过 XGCIDefineByPos、XGCIBindParamByPos 和 XGCIBindParamByName 绑定的参数,和结果集信息。

原型

C
XGCIRETURN XG_API XGCIFreeStmt(XGCIHSTMT hndp, int32 Option);

参数

  • hndp:语句句柄
  • Option:
    • XG_RESET_DEFINE
    • XG_RESET_PARAM
    • XG_RESET

说明

Option 为 XG_RESET_DEFINE 时,则释放通过 XGCIDefineByPos 绑定的变量信息。Option 为 XG_RESET_PARAM 时,则释放通过 XGCIBindParamByPos 或 XGCIBindParamByName 绑定的变量信息,不影响通过 XGCIDefineByPos 绑定的变量信息。Option 为 XG_RESET 时,在释放结果集的同时也会释放通过 Define 和 Bind 绑定的变量信息。Options 为上述三个以外的值时,其行为等同于调用 XGCIHandleFree 销毁语句句柄。

示例

C
XGCIFreeStmt(hstmt, XG_RESET);

XGCIErrors

功能

获取错误信息。

原型

C
XGCIRETURN XG_API XGCIErrors(XGCIHANDLE Hndp, char* ccode, char* errmessage, int* rlen);

参数

  • Hndp:句柄
  • ccode:错误码
  • errmessage:错误信息
  • rlen:错误信息的长度

说明

当某个接口的返回值不为 XGCI_SUCCESS 时,则可通过此接口获取错误原因。需传入对应的句柄以获取对应的错误信息。

示例

C
char errCode[7] = { 0 };
char errMsg[512] = { 0 };
int rlen = 0;
XGCIErrors(handle, errCode, errMsg, &rlen);
printf("[%s] %s\n", errCode, errMsg);

XGCINextResult

功能

存在多个结果集时,获取下一个结果集。

原型

C
XGCIRETURN XG_API XGCINextResult(XGCIHSTMT hndlp);

参数

  • hndlp:语句句柄

说明

使用 XGCIExecDirect 执行 SQL 语句时,传入的 SQL 语句中用分号分隔了两个及以上的查询语句时,数据库服务端返回对应个数的结果集。当前结果集为第一个结果集,当第一个结果集的行 fetch 完毕后,调用此接口可将当前结果集切换到第二个结果集。当没有结果集可供切换时,返回 XGCI_NO_RESULT。

示例

C
int id;
int ret;
const char* sql = "SELECT id FROM tab_test;SELECT id FROM tab_test";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);
XGCIDefineByPos(hstmt, 1, &id, 4, XG_C_INTEGER, NULL, NULL);
do {
    while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
        printf("%d\n", id);
    }
} while ((ret = XGCINextResult(hstmt)) == XGCI_SUCCESS);

XGCIGetData

功能

获取结果集当前行的列值。

原型

C
XGCIRETURN XG_API XGCIGetData(XGCIHSTMT hndlp, int32 ColNumber, int32 TargetCType,  void* TargetValuePtr, int32 BufferLen, int32* StrLenPtr);

参数

  • hndlp:语句句柄
  • ColNumber:列号,从 1 开始
  • TargetCType:C 语言类型
  • TargetValuePtr:变量地址
  • BufferLen:变量缓冲区大小
  • StrLenPtr:数据实际大小

说明

此接口需在 fetch 成功后调用。

在不涉及变长类型时,不使用 BufferLen。当列值为 null 时,*StrLenPtr 为 0。StrLenPtr 可为 NULL。

示例

C
const char* sql = "SELECT name FROM tab_test";
int ret = XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);
char name[20];
int len;
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS)
{
    XGCIGetData(hstmt, 1, XG_C_CHAR, name, 20, &len);
    printf("%s\n", len ? name : "null");
}

XGCITransBegin

功能

开启事务。

原型

C
XGCIRETURN XG_API XGCITransBegin(XGCIHSESS sesshndp);

参数

  • sesshndp:会话句柄

说明

使用事务需关闭自动提交。

示例

C
int flag = XGCI_AUTOCOMMIT_OFF;
XGCIHandleAttrSet(hsession, XGCI_ATTR_SESS_AUTO_COMMIT, &flag, 0);
// connect to database
XGCITransBegin(hsession);

XGCITransCommit

功能

提交事务。

原型

C
XGCIRETURN XG_API XGCITransCommit(XGCIHSESS sesshndp);

参数

  • sesshndp:会话句柄

说明

开启事务并执行 DML 后,调用此接口对变更进行持久化。

示例

C
XGCITransBegin(hsession);
// execute DML
XGCITransCommit(hsession);

XGCITransCreateSavepoint

功能

创建事务保存点。

原型

C
XGCIRETURN XG_API XGCITransCreateSavepoint(XGCIHSESS sesshndp, int sp_no);

参数

  • sesshndp:会话句柄
  • sp_no:保存点编号,取值范围为:1 至 10

说明

创建保存点时,为保存点指定一个编号,可通过 XGCITransRollback 将变更回滚至指定编号的保存点,回滚成功后此保存点之后的变更将全部撤销。

示例

C
//创建 1 号保存点
XGCITransCreateSavepoint(hsession, 1);

XGCITransRollback

功能

回滚事务。

原型

C
XGCIRETURN XG_API XGCITransRollback(XGCIHSESS sesshndp, int type, int lvl);

参数

  • sesshndp:会话句柄
  • type:回滚类型,取值 ROLLBACK_TRANS 或 ROLLBACK_TOSAVEPOINT
  • lvl:保存点编号,取值范围为:1 至 10

说明

当 type 值为 ROLLBACK_TRANS 时,回滚所有变更。当 type 值为 ROLLBACK_TOSAVEPOINT 时,回滚至对应保存点。

示例

C
const char* sql;
//开启事务
XGCITransBegin(hsession);

//创建 1 号保存点
XGCITransCreateSavepoint(hsession, 1);

sql = "INSERT INTO tab_test (id) values(1)";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);

//创建 2 号保存点
XGCITransCreateSavepoint(hsession, 2);

sql = "INSERT INTO tab_test (id) values(2)";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);

//创建 3 号保存点
XGCITransCreateSavepoint(hsession, 3);

sql = "INSERT INTO tab_test (id) values(3)";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);

//回滚至 2 号保存点
XGCITransRollback(hsession, ROLLBACK_TOSAVEPOINT, 2);

//提交事务,id 为 1 的数据被提交,id 为 2 和 3 的数据被回滚
XGCITransCommit(hsession);

XGCILobCreate

功能

创建大对象定位符。

原型

C
LobLocator XG_API XGCILobCreate();

参数

示例

C
LobLocator lob = XGCILobCreate();

XGCILobReset

功能

释放大对象定位符中为数据分配的内存空间。

原型

C
XGCIRETURN XG_API XGCILobReset(LobLocator pLob);

参数

  • pLob:大对象定位符

示例

C
LobLocator lob = XGCILobCreate();

//write data to lob

XGCILobReset(lob);

XGCILobRelease

功能

释放大对象定位符。

原型

C
XGCIRETURN XG_API XGCILobRelease(LobLocator pLob);

参数

  • pLob:大对象定位符

说明

释放数据所占用的内存空间和 Lob 结构体本身所占用的内存空间。

示例

C
LobLocator lob = XGCILobCreate();

//do something to lob

XGCILobRelease(lob);

XGCILobPutData

功能

写数据至大对象定位符。

原型

C
XGCIRETURN XG_API XGCILobPutData(LobLocator pLob, int32 DataLen, void* pData);

参数

  • pLob:大对象定位符
  • DataLen:写入数据的长度
  • pData:数据所在内存的地址

说明

数据只能一次写入,不支持分段写入。

示例

C
char buf[1024];
size_t len = fread(buf, 1, 1024, fp);
XGCILobPutData(lob, len, buf);

XGCILobGetDataPtr

功能

获取大对象定位符中数据块的地址和数据长度。

原型

C
XGCIRETURN XG_API XGCILobGetDataPtr(LobLocator pLob, int32* pDataLen, char** ppOutData);

参数

  • pLob:大对象定位符
  • pDataLen:数据长度
  • ppOutData:数据库地址

说明

不可手动将使用此接口获取的数据块进行释放,内存释放应使用 XGCILobReset 或 XGCILobRelease。

示例

C
int len;
char* data;
XGCILobGetDataPtr(lob, &len, &data);

XGCILobGetData

功能

读取大对象定位符中的数据。

原型

C
XGCIRETURN XG_API XGCILobGetData(LobLocator pLob, int32 DataOffset, int32 BuffLen, char* BuffPtr,int32* pOutLen);

参数

  • pLob:大对象定位符
  • DataOffset:读取数据的偏移量
  • BuffLen:缓冲区大小
  • BuffPtr:数据缓冲区
  • pOutLen:读取的字节数

说明

由于数据读取完毕前无法确定数据的总大小,因此需要分段进行读取,每次读取后应将 *pOutLen 的值累加进 DataOffset,然后进行下一次调用。当 *pOutLen 的值为 0 时,表示数据读取完毕。

示例

C
int offset = 0;
int len;
char buf[1024];
while ((ret = XGCILobGetData(lob, offset, 1024, buf, &len)) == XGCI_SUCCESS && len > 0)
{
    // do something about buf
    offset += len;
}

XGCIBindParamArrayByPos

功能

为用 ? 作为占位符的 SQL 语句批量绑定参数。

原型

C
XGCIRETURN XG_API XGCIBindParamArrayByPos(XGCIHSTMT Hndp, int32 Position, int32 param_num, PARAM_TYPE type, 
                                          int32 array_size, void* ValuePtr, int32 BuffSize, int32 CType,
                                          int32* rCodep, int32* ActualLenp, int32 SqlType);

参数

  • Hndp:语句句柄
  • Position:参数的位置编号,从 1 开始
  • param_num:SQL 语句中参数的个数
  • type:固定为 PARAM_IN
  • array_size:数组大小
  • ValuePtr:数组地址
  • BuffSize:变长类型应大于 0,无实际用途
  • CType:C 语言类型
  • rCodep:无实际用途
  • ActualLenp:参数值大小
  • SqlType:SQL 类型

说明

参数 param_num 为参数的个数,即为 SQL 语句中问号的个数。参数 type 的取值固定为 PARAM_IN,因为仅支持批量输入。参数 ActualLenp 应传入一个数据,数据元素个数应与 ValuePtr 数组的元素个数相同且一一对应,0 则代表 null,对于变长数据类型,其值为实际插入的字节数。

此接口配合 XGCIExecDirectBatch 使用。

示例

C
const char* sql = "INSERT INTO tab_test (id, name, created) VALUES(?, ?, ?)";
int idArr[3] = { 1,2,3 };
const char* nameArr[3] = { "AAA", "BBB", "CCC" };
DATE_STRUCT dateArr[3] = { {2000,1,1}, {2000,1,2}, {2000,1,3} };
int len1[3] = { 1,1,1 };
int len2[3] = { 3,2,1 };
int len3[3] = { 1,0,1 };
XGCIBindParamArrayByPos(hstmt, 1, 3, PARAM_IN, 3, idArr, 0, XG_C_INTEGER, NULL, len1, SQL_INTEGER);
XGCIBindParamArrayByPos(hstmt, 2, 3, PARAM_IN, 3, nameArr, 1, XG_C_CHAR, NULL, len2, SQL_CHAR);
XGCIBindParamArrayByPos(hstmt, 3, 3, PARAM_IN, 3, dateArr, 0, XG_C_DATE, NULL, len3, SQL_DATE);

XGCIBindParamArrayByName

功能

为用形如 :name 作为占位符的 SQL 语句批量绑定参数。

原型

C
XGCIRETURN XG_API XGCIBindParamArrayByName(XGCIHSTMT Hndp, char* Name, int32 param_num, PARAM_TYPE type, 
                                           int32 array_size, void* ValuePtr, int32 BuffSize, int32 CType, 
                                           int32* rCodep, int32* ActualLenp, int32 SqlType);

参数

  • Hndp:语句句柄
  • Name:参数名
  • param_num:SQL 语句中参数的个数
  • type:固定为 PARAM_IN
  • array_size:数组大小
  • ValuePtr:数组地址
  • BuffSize:变长类型应大于 0,无实际用途
  • CType:C 语言类型
  • rCodep:无实际用途
  • ActualLenp:参数值大小
  • SqlType:SQL 类型

说明

参数名不可使用数据库关键字。参数 param_num 为参数的个数,即为 SQL 语句中问号的个数。参数 type 的取值固定为 PARAM_IN,因为仅支持批量输入。参数 ActualLenp 应传入一个数据,数据元素个数应与 ValuePtr 数组的元素个数相同且一一对应,0 则代表 null,对于变长数据类型,其值为实际插入的字节数。

此接口配合 XGCIExecDirectBatch 使用。

示例

C
const char* sql = "INSERT INTO tab_test (id, name, created) VALUES(:id, :name, :created)";
int idArr[3] = { 1,2,3 };
const char* nameArr[3] = { "AAA", "BBB", "CCC" };
DATE_STRUCT dateArr[3] = { {2000,1,1}, {2000,1,2}, {2000,1,3} };
int len1[3] = { 1,1,1 };
int len2[3] = { 3,2,1 };
int len3[3] = { 1,0,1 };
XGCIBindParamArrayByName(hstmt, (char*)"id", 3, PARAM_IN, 3, idArr, 0, XG_C_INTEGER, NULL, len1, SQL_INTEGER);
XGCIBindParamArrayByName(hstmt, (char*)"name", 3, PARAM_IN, 3, nameArr, 1, XG_C_CHAR, NULL, len2, SQL_CHAR);
XGCIBindParamArrayByName(hstmt, (char*)"created", 3, PARAM_IN, 3, dateArr, 0, XG_C_DATE, NULL, len3, SQL_DATE);

XGCIExecDirectBatch

功能

执行 SQL 语句并发送批量绑定的参数。

原型

C
XGCIRETURN XG_API XGCIExecDirectBatch(XGCIHSTMT hndlp, char* sql_str, int32 str_len);

参数

  • hndlp:语句句柄
  • sql_str:SQL 语句
  • str_len:SQL 语句长度,可传入 XGCI_NTS

说明

此接口配合 XGCIBindParamArrayByPos 或 XGCIBindParamArrayByName 使用,不需使用 XGCIPrepare。

示例

C
const char* sql = "INSERT INTO tab_test (id, name, created) VALUES(?, ?, ?)";
int idArr[3] = { 1,2,3 };
const char* nameArr[3] = { "AAA", "BBB", "CCC" };
DATE_STRUCT dateArr[3] = { {2000,1,1}, {2000,1,2}, {2000,1,3} };
int len1[3] = { 1,1,1 };
int len2[3] = { 3,2,1 };
int len3[3] = { 1,0,1 };
XGCIBindParamArrayByPos(hstmt, 1, 3, PARAM_IN, 3, idArr, 0, XG_C_INTEGER, NULL, len1, SQL_INTEGER);
XGCIBindParamArrayByPos(hstmt, 2, 3, PARAM_IN, 3, nameArr, 1, XG_C_CHAR, NULL, len2, SQL_CHAR);
XGCIBindParamArrayByPos(hstmt, 3, 3, PARAM_IN, 3, dateArr, 0, XG_C_DATE, NULL, len3, SQL_DATE);
XGCIExecDirectBatch(hstmt, (char*)sql, XGCI_NTS);

/* 
执行成功后结果为
| id | name | created    |
--------------------------
|  1 | AAA  | 2000-01-01 |
|  2 | BB   | null       |
|  3 | C    | 2000-01-03 |
*/

XGCITables

功能

获取数据库中的表信息。

原型

C
XGCIRETURN XG_API XGCITables(XGCIHSTMT hndlp, char* catalogName, int32 catalength, 
                             char* schemaName, int32 schemalength, char* tableName, int32 tablelength, 
                             char* tableType, int32 typelength);

参数

  • hndlp:语句句柄
  • catalogName:库名
  • catalength:库名长度
  • schemaName:模式名
  • schemalength:模式名长度
  • tableName:表名
  • tablelength:表名长度
  • tableType:表类型,取值为:TABLE、VIEW 和 SYNONYM
  • typelength:表类型长度

说明

库名、模式名、表名和表类型均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含五个字段的结果集,分别为:

列号列名类型含义
1TABLE_CATvarchar库名
2TABLE_SCHEMvarchar模式名
3TABLE_NAMEvarchar表名
4TABLE_TYPEvarchar表类型
5REMARKSvarchar备注

示例

C
XGCITables(hstmt, NULL, 0, NULL, 0, NULL, 0, NULL, 0);

char db[32];
char schema[32];
char table[32];
char type[32];
char remark[32];
XGCIDefineByPos(hstmt, 1, db, 32, XG_C_CHAR, NULL, NULL);
XGCIDefineByPos(hstmt, 2, schema, 32, XG_C_CHAR, NULL, NULL);
XGCIDefineByPos(hstmt, 3, table, 32, XG_C_CHAR, NULL, NULL);
XGCIDefineByPos(hstmt, 4, type, 32, XG_C_CHAR, NULL, NULL);
XGCIDefineByPos(hstmt, 5, remark, 32, XG_C_CHAR, NULL, NULL);

while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    printf("%s\t%s\t%s\t%s\t%s\n", db, schema, table, type, remark);
}

XGCIColumns

功能

获取表中的列信息。

原型

C
XGCIRETURN XGCIColumns(XGCIHSTMT hndlp, char* schema_name, short name_len1, 
                       char* table_name, short name_len2, char* column_name, short name_len3);

参数

  • hndlp:语句句柄
  • schema_name:模式名
  • name_len1:模式名长度
  • table_name:表名
  • name_len2:表名长度
  • column_name:列名
  • name_len3:列名长度

说明

模式名、表名和列名均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含 21 个字段的结果集,分别为:

列号列名类型含义
1db_namevarchar库名
2schema_namevarchar模式名
3table_namevarchar表名
4col_namevarchar列名
5col_nointeger列号
6type_namevarchar类型名
7c_typeintegerC 类型
8sql_typeintegerSQL 类型
9precisioninteger精度
10scaleinteger标度
11is_hideboolean是否隐藏
12deletedboolean是否删除
13varyingboolean是否变长
14not_nullboolean是否可为空
15is_serialboolean是否为序列值
16serial_idinteger序列值发生器的ID号
17def_valvarchar默认值
18is_virtualboolean该字段是否是虚字段
19commentsvarchar注释信息
20max_valvarchar最大值
21min_valvarchar最小值

示例

C
XGCIColumns(hstmt, NULL, 0, (char*)"tab_test", XGCI_NTS, NULL, 0);
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    // get values
}

XGCIIndexes

功能

获取索引信息。

原型

C
XGCIRETURN XGCIIndexes(XGCIHSTMT hndlp, char* schema_name, short name_len1, char* table_name, short name_len2);

参数

  • hndlp:语句句柄
  • schema_name:模式名
  • name_len1:模式名长度
  • table_name:表名
  • name_len2:表名长度

说明

模式名和表名均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含 28 个字段的结果集,分别为:

列号列名类型含义
1db_namevarchar库名
2schema_namevarchar模式名
3table_namevarchar表名
4index_namevarchar索引名
5index_typevarchar索引类型
6is_primaryboolean是否为主键
7is_uniqueboolean是否唯一值
8is_localboolean是否局部索引
9parti_typeinteger分区类型
10parti_numinteger分区数
11parti_keyvarchar分区键
12subparti_typeinteger子分区类型
13subparti_numinteger子分区数
14subparti_keyvarchar子分区键
15copy_numinteger副本数
16field_numinteger字段数
17keysvarchar索引键
18filtervarchar文档过滤器名
19vocablevarchar词表名
20lexervarchar语法分析器名
21word_leninteger词分割长度
22enable_transboolean是否需要进行事务支持
23create_timedatetime首次创建时间
24is_sysboolean是否系统内建
25keepin_cacheboolean是否 KEEP CACHE
26nologgingboolean是否不记 redo 日志
27validboolean是否有效
28slow_modifyboolean是否开启缓变

示例

C
XGCIIndexes(hstmt, NULL, 0, (char*)"tab_test", XGCI_NTS);
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    // get values
}

XGCIPrimaryKeys

功能

获取主键信息。

原型

C
XGCIRETURN XGCIPrimaryKeys(XGCIHSTMT hndlp, char* schema_name, short name_len1, char* table_name, short name_len2);

参数

  • hndlp:语句句柄
  • schema_name:模式名
  • name_len1:模式名长度
  • table_name:表名
  • name_len2:表名长度

说明

模式名和表名均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含 28 个字段的结果集,分别为:

列号列名类型含义
1db_namevarchar库名
2schema_namevarchar模式名
3table_namevarchar表名
4cons_namevarchar约束名
5col_namevarchar约束定义
6enableboolean是否启用
7validboolean是否有效
8is_sysboolean是否系统内建

示例

C
XGCIPrimaryKeys(hstmt, NULL, 0, (char*)"tab_test", XGCI_NTS);
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    // get values
}

XGCIForeignKeys

功能

获取外键信息。

原型

C
XGCIRETURN XGCIForeignKeys(XGCIHSTMT hndlp, char* PKschema_name, short name_len1, char* PKtable_name, short name_len2, 
                           char* FKschema_name, short name_len3, char* FKtable_name, short name_len4);

参数

  • hndlp:语句句柄
  • PKschema_name:模式名1
  • name_len1:模式名1长度
  • PKtable_name:表名1
  • name_len2:表名1长度
  • FKschema_name:模式名2
  • name_len3:模式名2长度
  • FKtable_name:表名2
  • name_len4:表名2长度

说明

模式名和表名均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含 15 个字段的结果集,分别为:

列号列名类型含义
1db_namevarchar库名
2schema_namevarchar模式名
3table_namevarchar表名
4ref_schema_namevarchar被引用模式名
5ref_table_namevarchar被引用表名
6cons_namevarchar约束名
7match_typevarchar外键匹配方式
8deferrableboolean延期特性
9initdeferredboolean延期特性的初始设置
10definevarchar约束定义
11update_actionvarchar当引用的记录更改时的反向动作
12delete_actionvarchar当引用的记录删除时的反向动作
13enableboolean是否启用
14validboolean是否有效
15is_sysboolean是否系统内建

示例

C
XGCIForeignKeys(hstmt, (char*)"SYSDBA", XGCI_NTS, (char*)"tab_pk", XGCI_NTS, (char*)"SYSDBA", XGCI_NTS, (char*)"tab_fk", XGCI_NTS);
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    // get values
}

XGCIViews

功能

获取视图信息。

原型

C
XGCIRETURN XGCIViews(XGCIHSTMT hndlp, char* schema_name, short name_len1, char* view_name, short name_len2);

参数

  • hndlp:语句句柄
  • schema_name:模式名
  • name_len1:模式名长度
  • view_name:视图名
  • name_len2:视图名长度

说明

模式名和视图名均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含 10 个字段的结果集,分别为:

列号列名类型含义
1db_namevarchar库名
2schema_namevarchar模式名
3user_namevarchar用户名
4view_namevarchar视图名
5definevarchar视图定义
6optioninteger视图选项
7create_timedatetime创建时间
8validboolean是否有效
9is_sysboolean是否系统内建
10commentsboolean注释信息

示例

C
XGCIViews(hstmt, NULL, 0, NULL, 0);
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    // get values
}

XGCIProcedures

功能

获取存储过程信息。

原型

C
XGCIRETURN XGCIProcedures(XGCIHSTMT hndlp, char* schema_name, short name_len1, char* proc_name, short name_len2);

参数

  • hndlp:语句句柄
  • schema_name:模式名
  • name_len1:模式名长度
  • proc_name:存储过程名
  • name_len2:存储过程名长度

说明

模式名和存储过程名均可传入 NULL,传入 NULL 则查询所有。若名称中包含 % 则进行模糊查询。

成功调用此接口后,服务端将返回包含 10 个字段的结果集,分别为:

列号列名类型含义
1db_namevarchar库名
2schema_namevarchar模式名
3user_namevarchar用户名
4proc_namevarchar过程名
5languagevarchar语言
6definevarchar过程定义
7create_timedatetime创建时间
8validboolean是否有效
9commentsvarchar注释信息
10is_sysboolean是否系统内建

示例

C
XGCIProcedures(hstmt, NULL, 0, NULL, 0);
while ((ret = XGCIFetch(hstmt)) == XGCI_SUCCESS) {
    // get values
}

XGCIParamGet

功能

获取列描述句柄。

原型

C
XGCIRETURN XG_API XGCIParamGet(XGCIHANDLE hndlp, HANDLE_TYPE type, void** ptr_param, int param_no);

参数

  • hndlp:语句句柄
  • type:固定值 XGCI_DTYPE_PARAM
  • ptr_param:指针的地址
  • param_no:列号,从 1 开始

说明

成功执行查询,再调用此接口获取结果集中列的描述句柄。

示例

C
XGCIHANDLE param;
const char* sql = "SELECT * FROM tab_test";
XGCIExecDirect(hstmt, (char*)sql, XGCI_NTS);

XGCIParamGet(hstmt, XGCI_DTYPE_PARAM, (void**)&param, 1);

XGCIAttrGet

功能

获取属性值。

原型

C
XGCIRETURN XG_API XGCIAttrGet(XGCIHANDLE hndlp, HANDLE_TYPE type, void* attributep, uint32* sizep, int attrtype);

参数

  • hndlp:句柄
  • type:句柄类型
  • attributep:属性值
  • sizep:属性值大小
  • attrtype:属性类型

说明

当句柄类型为环境句柄、服务器句柄、会话句柄和语句句柄时,此接口与 XGCIHandleAttrGet 功能相同,详细用法请参考 XGCIHandleAttrGet。此处仅展示当句柄为列描述句柄时,属性类型的取值情况。

列描述句柄由 XGCIParamGet 接口获取。

  • XGCI_ATTR_NAME:列名,attributep 为字符数组
  • XGCI_ATTR_ALIAS:列名,attributep 为字符数组
  • XGCI_ATTR_DATA_TYPE:C 类型,attributep 为 int32 的变量地址
  • XGCI_ATTR_SQL_TYPE:SQL 类型,attributep 为 int32 的变量地址
  • XGCI_ATTR_DATA_SIZE:数据大小,attributep 为 int32 的变量地址
  • XGCI_ATTR_CHAR_SIZE:与 XGCI_ATTR_DATA_SIZE 相同
  • XGCI_ATTR_TYPE_NAME:类型名,attributep 为字符数组
  • XGCI_ATTR_CHAR_USED:C 类型是否为字符型,attributep 为 int32 的变量地址
  • XGCI_ATTR_DATA_IS_CHAR:SQL 类型是否为字符型,attributep 为 int32 的变量地址
  • XGCI_ATTR_PRECISION:numeric 类型的精度,attributep 为 int32 的变量地址
  • XGCI_ATTR_SCALE:numeric 类型的标度,attributep 为 int32 的变量地址
  • XGCI_ATTR_DATA_IS_NOTNULL:是否为非空字段,attributep 为 int32 的变量地址

示例

C
XGCIHANDLE param;
char str[128];
unsigned int len;
// get param by XGCIAttrGet
XGCIAttrGet(param, XGCI_DTYPE_PARAM, str, &len, XGCI_ATTR_NAME);