Pro*C++: 批量读取要注意的问题

    Pro*C中批量读取游标中的数据的时候,需要注意:最后一次批量读取游标中的数据的时候,数据被取到HostArray中,同时sqlca.sqlcode被置为1403(NO_DATA_FOUND)。如果在fetch后立即判断sqlca.sqlcode的话,可能就导致最后一次的数据取不到。
       保险的办法是定义一个变量记录上次的读取条数:
if (sqlca.sqlcode==1403 && sqlca.sqlerrd[2]<=nLastCount)
{
    break;
}
nLastCount = sqlca.sqlerrd[2];

    好的写法是:不在fetch后判断sqlca.sqlcode,而是使用do{}while(sqlca.sqlcode!=1403);来判断,代码更简洁些!

do
{
    EXEC SQL FTECH CurName INTO :HostArray;
    int nCount = sqlca.sqlerrd[2] - nLastCount;
    //...
} while(sqlca.sqlcode!=1403);

 

你可能感兴趣的:(sql,C++,c,C#)