设置游标选项 (ODBC)

适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 平台系统(PDW)

若要设置游标选项,请调用 SQLSetStmtAttr 设置或 SQLGetStmtAttr 以获取控制游标行为的语句选项。

Attribute 指定
SQL_ATTR_CURSOR_TYPE 只进、静态、动态或由键集驱动的游标类型
SQL_ATTR_CONCURRENCY 只读、锁定、乐观使用时间戳或乐观使用值的并发控制选项
SQL_ATTR_ROW_ARRAY_SIZE 在每个提取中检索的行数
SQL_ATTR_CURSOR_SENSITIVITY 显示或不显示由其他连接对游标行进行的更新的游标
SQL_ATTR_CURSOR_SCROLLABLE 可以向前和向后滚动的游标

这些属性(只进、只读、行集大小为 1)的默认值不使用服务器游标。 若要使用服务器游标,必须将这些属性中的至少一个属性设置为非默认值,并且所执行的语句必须是包含单个 SELECT 语句的单个 SELECT 语句或存储过程。 使用服务器游标时,SELECT 语句无法使用服务器游标不支持的子句:COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。

可以通过设置SQL_ATTR_CURSOR_TYPE和SQL_ATTR_CONCURRENCY或设置SQL_ATTR_CURSOR_SENSITIVITY和SQL_ATTR_CURSOR_SCROLLABLE来控制使用的游标类型。 不应将指定游标行为的两种方法混用。

示例

A. 设置动态游标

以下示例分配一个语句句柄,之后以行版本控制乐观并发方式设置动态游标类型,然后执行 SELECT。

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_DYNAMIC, SQL_IS_INTEGER);  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CONCURRENCY, SQLPOINTER)SQL_CONCUR_ROWVER, SQL_IS_INTEGER);  
retcode = SQLExecDirect(hstmt1, SELECT au_lname FROM authors", SQL_NTS);  

B. 设置可滚动的敏感游标

以下示例分配一个语句句柄,之后设置可滚动、敏感游标,然后执行 SELECT

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);  
  
// Set the cursor options and execute the statement.  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, SQLPOINTER)SQL_SCROLLABLE, SQL_IS_INTEGER);  
retcode = SQLSetStmtAttr(hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, SQLPOINTER)SQL_INSENSITIVE, SQL_IS_INTEGER);  
retcode = SQLExecDirect(hstmt1, select au_lname from authors", SQL_NTS);  

另请参阅

执行查询操作指南主题 (ODBC)