常用工具: 简繁转换 HTML/JS互转 Url编码Escape解析 Unicode编码转换 设为首页 加入收藏夹
更多内容
" id="arctext" class="center" " class="arcinfo center" " id="slistl" class="left" " id="mid_slistl_sch" class="left" " id="mid_slistl_adv" class="left" " id="mid_slistl_adv2" " src="http://www.fzs8.net/d/js/acmsd/middle2.js"
文章正文

ASP Hex 函数

来源:  网络收集  字体:[ ]
站内搜索系统
文章正文

SQLServer API 服务器游标

来源:  网络  2007-06-30 00:00:00 字体:[ ]

API 服务器游标

OLE DB、ODBC、ADO 和 DB-Library API 支持将游标映射至已执行 SQL 语句的结果集。Microsoft® SQL Server™ OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library 动态链接库 (DLL) 通过使用 API 服务器游标执行这些操作。API 服务器游标在服务器上实现,并由 API 游标函数进行管理。当应用程序调用 API 游标函数时,游标操作由 OLE DB 提供程序、ODBC 驱动程序或 DB-Library DLL 传递给服务器。

当在 OLE DB、ODBC 和 ADO 中使用 API 服务器游标时,使用 API 函数和方法实现如下功能:

  1. 打开一个连接

  2. 设置定义游标特征的特性或属性,API 自动将游标映射到每个结果集。

  3. 执行一条或多条 Transact-SQL 语句。

  4. 使用 API 函数和方法提取结果集中的行。

在 DB-Library 中,与 API 服务器游标一起使用特殊的 DB-Library 游标库函数。

当 API 游标特性或属性设为其默认值时,SQL Server OLE DB 提供程序和 SQL Server ODBC 驱动程序使用默认结果集。虽然从技术上说 API 要求游标,但默认游标特征与默认结果集的行为是匹配的。因此,OLE DB 提供程序和 ODBC 驱动程序利用默认结果集实现默认游标选项,这是从服务器中检索行最有效的方法。使用默认结果集时,应用程序可执行任何 Transact-SQL 语句和批处理,但是它在一个连接中只能有一个未完成的语句。这意味着在连接上执行下一个语句之前,应用程序必须处理或者取消由一个语句返回的所有结果集。

当 API 游标特性或属性没有按默认值进行设置时,SQL Server OLE DB 提供程序和 SQL Server ODBC 驱动程序将使用 API 服务器游标代替默认结果集。每次对提取行的 API 函数的调用都会产生到服务器的一次往返,以从 API 服务器游标中提取行。

DB-Library 应用程序使用 DB-Library 游标库函数请求游标。如果 DBCLIENTCURSOR 没有设置,那么 DB-Library 游标库函数将采用与 SQL Server OLE DB 提供程序和 SQL Server ODBC 驱动程序相同的方法来使用 API 服务器游标。

API 服务器游标约束

使用 API 服务器游标时,应用程序不能执行下列语句:

  • 服务器游标中SQL Server 不支持的 Transact-SQL 语句。

  • 返回多个结果集的批处理或存储过程。

  • 包含 COMPUTE、COMPUTE BY、FOR BROWSE 或 INTO 子句的 SELECT 语句。

  • 引用远程存储过程的 EXECUTE 语句。
API 服务器游标实现

SQL Server OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 使用这些特殊的系统存储过程向服务器示意游标操作。

  • sp_cursoropen 定义与游标和游标选项相关的 SQL 语句,然后生成游标。

  • sp_cursorfetch 从游标中提取一行或多行。

  • sp_cursorclose 关闭并释放游标。

  • sp_cursoroption 设置各种游标选项。

  • sp_cursor 用于请求定位更新。

  • sp_cursorprepare 把与游标有关的 Transact-SQL 语句或批处理编译成执行计划,但并不创建游标。

  • sp_cursorexecute 从由 sp_cursorprepare 创建的执行计划中创建并填充游标。

  • sp_cursorunprepare 废弃由 sp_cursorprepare 生成的执行计划。

这些系统存储过程将在使用 API 服务器游标的 ADO、OLE DB、ODBC 和 DB-Library 应用程序的 SQL Server 事件探查器跟踪中显示。这些记录仅供 SQL Server OLE DB 提供程序、SQL Server ODBC 驱动程序和 DB-Library DLL 内部使用。应用程序可通过数据库 API 的游标功能来使用这些过程的完整功能。在应用程序中直接指定过程的做法不受支持。

当 SQL Server 在某连接上执行语句时,只有在来自第一个语句的所有结果处理完毕或被取消时,才能在连接上执行其它语句。在使用 API 服务器游标时,这个规则仍然成立,但是从应用程序的角度来看,好象 SQL Server 在一个连接上已经开始支持多个活动语句。这是因为完整的结果集存储在服务器游标中,而仅有的传递给 SQL Server 的语句是对 sp_cursor 系统存储过程的执行。SQL Server 执行这些存储过程,且一旦客户端检索该结果集,它就可以开始执行其它语句。OLE DB 提供程序和 ODBC 驱动程序则在把控制返回给应用程序之前始终检索来自 sp_cursor 存储过程的所有结果集。这使应用程序可以插空在多级活动服务器游标中进行提取操作。

下表说明了应用程序如何利用两个语句句柄在一个连接上同时处理两个游标。

语句句柄 1语句句柄 2
将游标特性设置可使用 API 服务器游标。 
SQLExecDirect 一个 SQL 语句。ODBC 驱动程序调用 sp_cursoropen,然后检索该过程所返回的结果集。 
 将游标特性设置可使用 API 服务器游标。
 SQLExecDirect 一个 SQL 语句。ODBC 驱动程序调用 sp_cursoropen,然后检索该过程所返回的结果集。
SQLFetchScroll 检索第一个行块。驱动程序调用 sp_cursorfetch,然后检索该过程所返回的结果集。 
 SQLFetchScroll 检索第一个行块。驱动程序调用 sp_cursorfetch,然后检索该过程所返回的结果集。
SQLFetchScroll 以检索另一行块。驱动程序调用 sp_cursorfetch,然后检索该过程所返回的结果集。 
 SQLFetchScroll 以检索另一行块。驱动程序调用 sp_cursorfetch,然后检索该过程所返回的结果集。
调用 SQLFreeStmtSQLCloseCursor。驱动程序调用 sp_cursorclose 
 调用 SQLFreeStmtSQLCloseCursor。驱动程序调用 sp_cursorclose

由于在所有 sp_cursor 存储过程的调用之后连接中不再留有未决结果,那么在假设全部使用 API 服务器游标执行的前提下,就可以在单个连接上并行执行多个 Transact-SQL 语句。

指定 API 服务器游标

下面是有关在 API 中如何使用 API 服务器游标的摘要:

  • OLE DB
    1. 打开会话对象,打开命令对象,并指定命令文本。

    2. 设置行集属性(如 DBPROP_OTHERINSERT、DBPROP_OTHERUPDATEDELETE、DBPROP_OWNINSERT、DBPROP_OWNUDPATEDELETE 等)以控制游标行为。

    3. 执行命令对象。

    4. 使用下列方法提取结果集中的行,如 IRowset::GetNextRows、IRowsetLocate::GetRowsAt、IRowsetLocate::GetRowsAtBookmark 和 IRowsetScroll::GetRowsAtRatio。
  • ODBC
    1. 打开一个连接并调用 SQLAllocHandle 分配语句句柄。

    2. 调用 SQLSetStmtAttr 以设置 SQL_ATTR_CURSOR_TYPE、SQL_ATTR_CONCURRENCY 和 SQL_ATTR_ROW_ARRAY_SIZE 的特性。作为选择,可通过设置 SQL_ATTR_CURSOR_SCROLLABLE 和 SQL_ATTR_CURSOR_SENSITIVITY 特性来指定游标的行为。

    3. 使用SQLExecDirectSQLPrepareSQLExecute 执行 Transact-SQL 语句。

    4. 使用 SQLFetchSQLFetchScroll 提取行或行块。
  • ADO
    1. 定义连接对象和记录集对象,然后对连接对象执行 Open 方法。

    2. 指定 CursorType 和/或 LockType 参数以对记录集执行 Open 方法。

    3. 使用 Move、MoveFirst、MoveLast、MoveNext 和 MovePrevious 记录集方法提取行。
  • DB-Library
    1. DB-Library 核心函数总是使用默认结果集。

    2. 使用 DB-Library 游标库函数来使用 API 服务器游标,无须设置 DBCLIENTCURSOR。

请参见

通过 ADO 使用游标

行集和 SQL Server 游标

使用游标

游标函数


  
上一篇:SQLServer 客户端游标
下一篇:SQLServer Transact-SQL 游标
最新文章
推荐文章
热门文章
版权所有:IT加油站   COPYRIGHT © 2007 WWW.FZS8.NET ALL RIGHTS RESERVED.
闽ICP备08008535号