在 firehose 游标上,当 statement 属性SQL_SOPT_SS_CURSOR_OPTIONS
设置为SQL_CO_FIREHOSE_AF
并执行该语句时,观察到 autofetch 的不同行为,如下所述:
1) 第一次调用 SQLExecute 时,它不会自动获取。2) 在同一个语句句柄上第二次调用 SQLExecute 时,在使用 关闭游标后SQLFreestmt(hstmt, SQL_CLOSE)
,它会使用 自动获取 1 行SQLExecute
。
那么预期的行为是什么,是否应该自动获取?这似乎是 SQL Native 客户端驱动程序中的错误。
我也没有看到文档,SQL_CO_FIREHOSE_AF
但它列在sqlncli.h
?
带有注释的代码片段:
rc = SQLSetStmtAttr(hstmt1, (UWORD) SQL_SOPT_SS_CURSOR_OPTIONS, (SQLPOINTER) SQL_CO_FIREHOSE_AF, 0);
...
rc = SQLSetStmtAttr(hstmt1, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0);
// Execute first statement
rc = SQLExecute(hstmt1); // it does not autofetch the data.
...
rc = SQLFreeStmt(hstmt1, SQL_CLOSE);
...
rc = SQLSetStmtAttr(hstmt1, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, 0);
// Execute first statement
rc = SQLExecute(hstmt1); // it autofetch 1 record.
谢谢,
穆克什