为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:7
【操作系统】:银河麒麟V4
【CPU】:X86
【问题描述】*:dpi_fetch 循环不结束,是什么情况?问题情况:实际表里10条记录,循环不结束读取第一条记录
while(dpi_fetch(hstmt, &row_num) != DSQL_NO_DATA)
{
printf("c1 = %d, c2 = %s ,\n", out_c1, out_c2);
}
#if 1
#define DM_SVR "192.168.10.55:5236"
#define DM_USER "SYSDBA"
#define DM_PWD "a12345678"
int dm_test()
{
dhstmt hstmt; /* 语句句柄 */
dhdesc hdesc; /* 描述符句柄 */
dhenv henv; /* 环境句柄 */
dhcon hcon; /* 连接句柄 */
sdint4 out_c1 = 0;
sdbyte out_c2[20]= { 0 };
slength out_c1_ind = 0;
slength out_c2_ind = 0;
ulength row_num;
DPIRETURN rt; /* 函数返回值 */
//连接数据库
rt = dpi_alloc_env(&henv);
rt = dpi_alloc_con(henv, &hcon);
rt = dpi_login(hcon, (sdbyte *)DM_SVR, (sdbyte *)DM_USER, (sdbyte *)DM_PWD);
if(!DSQL_SUCCEEDED(rt))
{
dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
return rt;
}
rt = dpi_alloc_stmt(hcon, &hstmt);
//清空表,初始化测试环境
rt = dpi_exec_direct(hstmt, (sdbyte*) "delete from PRODUCTION.PRODUCT_CATEGORY");
//插入数据
rt = dpi_exec_direct(hstmt, (sdbyte*) "insert into PRODUCTION.PRODUCT_CATEGORY(NAME) values('语文'), ('数学'), ('英语'), ('体育') ");
if(!DSQL_SUCCEEDED(rt))
{
dpi_err_msg_print(DSQL_HANDLE_STMT, hstmt);
return rt;
}
printf("dpi: insert success\n");
//删除数据
rt = dpi_exec_direct(hstmt, (sdbyte*) "delete from PRODUCTION.PRODUCT_CATEGORY where name='数学' ");
if(!DSQL_SUCCEEDED(rt))
{
dpi_err_msg_print(DSQL_HANDLE_STMT, hstmt);
return rt;
}
printf("dpi: delete success\n");
//drop
rt = dpi_exec_direct(hstmt, (sdbyte*) "drop table DMHR.CITY4 ");
if(!DSQL_SUCCEEDED(rt))
{
dpi_err_msg_print(DSQL_HANDLE_STMT, hstmt);
}
else{
printf("dpi: drop success\n");
}
//更新数据
rt = dpi_exec_direct(hstmt, (sdbyte*) "update PRODUCTION.PRODUCT_CATEGORY set name = '英语-新课标' where name='英语' ");
if(!DSQL_SUCCEEDED(rt))
{
dpi_err_msg_print(DSQL_HANDLE_STMT, hstmt);
return rt;
}
printf("dpi: update success\n");
//查询数据
dpi_exec_direct(hstmt, (sdbyte*) "select * from PRODUCTION.PRODUCT_CATEGORY");
dpi_bind_col(hstmt, 1, DSQL_C_SLONG, &out_c1, sizeof(out_c1), &out_c1_ind);
dpi_bind_col(hstmt, 2, DSQL_C_NCHAR, &out_c2, sizeof(out_c2), &out_c2_ind);
printf("dpi: select from table...\n");
while(dpi_fetch(hstmt, &row_num) != DSQL_NO_DATA)
{
printf("c1 = %d, c2 = %s ,\n", out_c1, out_c2);
}
printf("dpi: select success\n");
//断开数据库连接
rt = dpi_logout(hcon);
if(!DSQL_SUCCEEDED(rt))
{
dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
return rt;
}
printf("dpi: Login out\n");
rt = dpi_free_con(hcon);
rt = dpi_free_env(henv);
}
#endif
请提供完整片段,盲猜跟&row_num有关