完全版 ESQL/C资料二(12)


printf ("n %d record(s) selectednn", counter);
/* 释放SQLDA申请的空间 */
free_da(sqldaPointer);
} else { /*不是SELECT语句,则执行SQL语句 */
EXEC SQL EXECUTE statement1;
if (CHECKERR ("executing the SQL statement") != 0) return SQLCODE;
} /* end if */
return SQLCODE;
}
/* end of program : ADHOC.SQC */
/**************************************************************************
* PROCEDURE : init_da
*为SQLDA分配空间 。其中SQLDASIZE的作用,是计算SQLDA的大小 。返回-1,
*表示无法分配空间 。
**************************************************************************/
int init_da (struct sqlda **DAPointer, int DAsqln) {
int idx;
*DAPointer = (struct sqlda *) malloc (SQLDASIZE(DAsqln));
if (*DAPointer == NULL)
return (-1);
memset (*DAPointer, "", SQLDASIZE(DAsqln));
strncpy((*DAPointer)->sqldaid, "SQLDA ", sizeof ((*DAPointer)->sqldaid));
(*DAPointer)->sqldabc = (long)SQLDASIZE(DAsqln);
(*DAPointer)->sqln = DAsqln;
(*DAPointer)->sqld = 0;
return 0;
}
/**********************************************************************
* FUNCTION : alloc_host_vars
*为sqlvar结构申请空间 。返回-1表示申请失败 。
***********************************************************************/
int alloc_host_vars (struct sqlda *sqldaPointer) {
short idx;
unsigned int memsize =0;
long longmemsize =0;
int precision =0;for (idx = 0; idx < sqldaPointer->sqld; idx) {
switch (sqldaPointer->sqlvar[idx].sqltype ) {
case SQL_TYP_VARCHAR:
case SQL_TYP_NVARCHAR:
case SQL_TYP_LONG:
case SQL_TYP_NLONG:
case SQL_TYP_DATE:
case SQL_TYP_NDATE:
case SQL_TYP_TIME:
case SQL_TYP_NTIME:
case SQL_TYP_STAMP:
case SQL_TYP_NSTAMP:
sqldaPointer->sqlvar[idx].sqltype = SQL_TYP_NCSTR;
sqldaPointer->sqlvar[idx].sqldata = https://www.rkxy.com.cn/dnjc/(char *SQL_POINTER)
malloc ((sqldaPointer->sqlvar[idx].sqllen));
memsize = (sqldaPointer->sqlvar[idx].sqllen);
break;
case SQL_TYP_DECIMAL:
case SQL_TYP_NDECIMAL:
precision = ((char *)&(sqldaPointer->sqlvar[idx].sqllen))[0];
sqldaPointer->sqlvar[idx].sqldata = https://www.rkxy.com.cn/dnjc/(char *SQL_POINTER)
malloc ((precision2) /2);
memsize = (precision2) /2;
break;
default:
sqldaPointer->sqlvar[idx].sqldata = https://www.rkxy.com.cn/dnjc/(char *SQL_POINTER)
malloc (sqldaPointer->sqlvar[idx].sqllen);
memsize = sqldaPointer->sqlvar[idx].sqllen;
break;
} /* endswitch */
if (sqldaPointer->sqlvar[idx].sqldata =https://www.rkxy.com.cn/dnjc/= NULL) {
return (-1);
} else {
memset (sqldaPointer->sqlvar[idx].sqldata,"",memsize);
} /* endif */
/*为sqlind申请空间*/
if ( sqldaPointer->sqlvar[idx].sqltype & 1 ) {
/* Allocate storage for short int */
sqldaPointer->sqlvar[idx].sqlind = (short *)malloc(sizeof(short));
/* Detect memory allocation error */
if ( sqldaPointer->sqlvar[idx].sqlind == NULL ) {
return(-1) ;
} else {
/* initialize memory to zero */
memset(sqldaPointer->sqlvar[idx].sqldata,"",sizeof(short));
} /* endif */
} /* endif */
} /* endfor */
return 0;
}
/**************************************************************************
* FUNCTION : free_da
* 释放SQLDA 申请的空间 。
**************************************************************************/
void free_da (struct sqlda *sqldaPointer) {
short idx;
for (idx = 0; idx < sqldaPointer->sqld; idx) {
free (sqldaPointer->sqlvar[idx].sqldata);
if (sqldaPointer->sqlvar[idx].sqltype & 1) {
free (sqldaPointer->sqlvar[idx].sqlind);
}
} /* endfor */
free (sqldaPointer);
}
/**************************************************************************
* PROCEDURE : readColName
* 返回列名信息
**************************************************************************/
char * readColName (struct sqlda *sqldaPointer, short sqlvarIndex, char * buffer) {
strncpy(buffer, sqldaPointer->sqlvar[sqlvarIndex].sqlname.data,
sqldaPointer->sqlvar[sqlvarIndex].sqlname.length);

推荐阅读