结果集内存地址绑定
绑定用于存放结果集的内存地址空间 在处理DQL类型的SQL语句时,一般会有结果集需要进行返回,此时,应用程序应该将指定的用于存放结果集的内存地址进行绑定,从而保证应用程序有效地获取结果集,XGCI可调用XGCIDefineByPos()函数与存放结果集的内存地址进行绑定。下文展示了如何将结果集绑定至指定内存地址空间的示例:
/* DQL语句 */ char sqlcmd[CMD_LEN] = “select V12211 ,V12212 ,V10201 ,V10202 ,V11041 ,V11052 from rdb_qc_surf_sta”; int clen1,clen2,clen3,clen4,clen5,clen6; int rp; /* 分配语句句柄 */ ret= XuguCIHandleAlloc(_cur_connp.hddbc, &(_cur_connp.hdstmt), HT_STATEMENT ); int rs2=XuguCIExecDirect(_cur_connp.hdstmt, sqlcmd, XuguCI_NTS); /* DQL语句 */ char sqlcmd[CMD_LEN] = “select V12211 ,V12212 ,V10201 ,V10202 ,V11041 ,V11052 from rdb_qc_surf_sta”; int clen1,clen2,clen3,clen4,clen5,clen6; int rp; /* 分配语句句柄 */ ret= XuguCIHandleAlloc(_cur_connp.hddbc, &(_cur_connp.hdstmt), HT_STATEMENT ); int rs2=XuguCIExecDirect(_cur_connp.hdstmt, sqlcmd, XuguCI_NTS); /* 绑定用于存放结果集的内存地址空间 */ XuguCIDefineByPos(_cur_connp.hdstmt,1,&((t_ESE.ATmprtr).max),4,Xugu_C_FLOAT,&rp,&clen1); XuguCIDefineByPos(_cur_connp.hdstmt,2,&((t_ESE.ATmprtr).min),4,Xugu_C_FLOAT,&rp,&clen2); XuguCIDefineByPos(_cur_connp.hdstmt,3,&((t_ESE.LclAPrssr).max),4,Xugu_C_FLOAT,&rp,&clen3); XuguCIDefineByPos(_cur_connp.hdstmt,4,&((t_ESE.LclAPrssr).min),4,Xugu_C_FLOAT,&rp,&clen4); XuguCIDefineByPos(_cur_connp.hdstmt,5,&(t_ESE.WindSpdMax),4,Xugu_C_FLOAT,&rp,&clen5); XuguCIDefineByPos(_cur_connp.hdstmt,6,&(t_ESE.PrcpttnMax),4,Xugu_C_FLOAT,&rp,&clen6); /* 获取结果集 */ ret= XuguCIFetch(_cur_connp.hdstmt);
绑定用于存放LOB数据结构的内存地址空间 对于获取大对象数据的 DQL 语句而言,其进行内存地址空间的绑定方式会有所不同。下文展示了在获取 LOB 数据时如何进行结果集存放内存地址空间的绑定:
/* 声明LOB定位符 */ LobLocator * one_lob; /* 初始化定位符 */ one_lob = XuguCILobCreate(); XuguCIDefineByPos(..,1,&(one_lob),..Xugu_C_LOB..); XuguCIExecDirect(hdstmt);
说明:
在描述符可以使用之前,必须调用 XGCILobCreate() 函数来分配描述符。