Skip to content

结果集内存地址绑定

  • 绑定用于存放结果集的内存地址空间 在处理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() 函数来分配描述符。