读书人

sql的绑定及动态传送参数

发布时间: 2012-08-02 11:35:25 作者: rapoo

sql的绑定及动态传递参数:
一:这个是进行绑定的函数的定义,
[code=C/C++][/code]
void prDatStf( BINDAT *bins, ... )
{
#ifdef ENTERPRISE_RELEASE
register BINDAT *bp;
register va_list ap;
#else
BINDAT *bp;
va_list ap;
#endif

va_start( ap, bins );
for (bp = bins;; bp++) {
if (bp->type = va_arg( ap, int )) {
bp->buffer = va_arg( ap, void* );
bp->length = va_arg( ap, long* );
}
else break;
}
va_end( ap );
}

二:下面是使用:
[code=C/C++][/code]
prDatStf( bindat,
PRS_STRING, (void*) abuf.Name, (long*) 0,
PRS_STRING, (void*) abuf.Project, (long*) 0,
PRS_LONG, (void*) &abuf.Version, (long*) 0,
PRS_STRING, (void*) abuf.OldName, (long*) 0,
PRS_END );

三,下面是动态的传递参数:

[code=C/C++][/code]
prSQL( "UPDATE AV_RELN SET PRED = : 1 "
"WHERE PROJ = :2 AND VER = :3 AND PRED = :4",
0, bindat, ActNameChange, &abuf, (void (*) (void*)) 0,
0, 0, DisplayMessage );



求解1:这种绑定是怎么进行的呢?半天没有看懂

求解2:这种绑定之后是不是所以的使用是不是都要传递,2,3,4这几个占位符?我只传递2,3就报错了。

不胜感激!!!



[解决办法]
auto BINDAT bindat[5];

acbuf.list = List;


/* Delete Activity Comments */

acbuf.key = 8;
prDatStf( bindat,
PRS_STRING, (void*) acbuf.Project, (long*) 0,
PRS_LONG, (void*) &acbuf.Version, (long*) 0,
PRS_STRING, (void*) acbuf.Name, (long*) 0,
PRS_END );

在给你说简单点 ,上面这段代码执行后那么bindat[0].type=PRS_STRING,bindat[0].buffer= (void*)acbuf
bindat[0].length=(long*)0,bindat[1].type=PRS_LONG,bindat[1].buffer=(void*)&acbbuf.Version,
bindat[1].length=(long*)0
好了,如果还不明白 那么我我也没办法了。

读书人网 >C++

热点推荐