技术开发 频道

微软SQL Server支持的四种游标类型

  三、只进游标

  只进游标是可更新的速度最快的游标,但不支持滚动。 它只支持从游标头至游标尾顺序提取行。 在提取行之前,无法从数据库中检索这些行。 从游标提取行时,由当前用户创建或由其他用户提交并会影响结果集中的行的所有 INSERT、UPDATE 和 DELETE 语句的效果均可见。 由于游标无法向后滚动,因此在行被提取之后,将无法通过使用游标看见在数据库中对行所做的更改。

  只进游标和只进/只读游标是基于查询的速度最快的游标。 它们应当用在优先考虑速度和内存占用量的方案中。

  下面的示例说明如何使用 ADO .NET 获取只进游标:

  cmd.CommandText = "Select * from tablename";

  SqlCeResultSet rs
= cmd.ExecuteResultSet(ResultSetOptions.Updatable);

  四、只进/只读游标

  只进/只读游标(在以前的 SQL Server Compact 3.5 版本中称为只进游标)是最快的游标,但无法进行更新。

  下面的示例说明如何使用 ADO.NET 获取只进/只读游标:

  cmd.CommandText = "Select * from tablename";

  SqlCeResultSet rs
= cmd.ExecuteResultSet(ResultSetOptions.None);

  注意 不能在只返回只读列的查询上创建只读游标,因为内部的所有 SQL Server Compact 3.5 游标都是可更新的。SQL Server Compact 3.5 无法更新在 SqlCeResultSet 中返回的只读列。 因此,它将失败,并返回错误“由于不存在可更新列,因此无法生成用于查询的可更新游标”。

  五、键集驱动游标

  SQL Server Compact 3.5 中的键集驱动游标是可以进行更新的可滚动游标。 键集驱动游标由一组称为键集的物理标识符来控制。 键集基于在打开游标时对 SELECT 语句验证合格的所有行。 在打开游标时将在临时表中生成键集。 使用键集驱动游标,将在执行查询时确定成员身份。

  SQL Server Compact 3.5 中的键集驱动游标与 SQL Server 中的键集驱动游标有细微的差别。 在 SQL Server 中,键集驱动游标使用一组唯一标识符作为键集中的键。 在 SQL Server Compact 3.5 中,键是表示值在表中的逻辑存储位置的书签。 它们不是唯一标识符。

  尽管对许多更改敏感,但键集驱动游标不如其他游标敏感。 例如,尽管在游标内的插入将在结束时可以看见,但无法看见在游标外的插入。 在这种情况下,建议您关闭并重新打开游标,或使用一个只进游标。

  由于 SQL Server Compact 3.5 使用书签来定义键集,因此通过使用游标,对键集中所包括行的数据值所做的所有更改都是可见的。 对于在游标内所做的更改和在游标外所做的更改,情况都是这样的。

  无论是在游标内还是在游标外,在键集游标中所做的任何删除操作都将导致在试图提取行时报告该行已被删除。

  下面的示例说明如何使用 ADO .NET 获取键集驱动游标:

  cmd.CommandText = "Select * from tablename";

  SqlCeResultSet rs
= cmd.ExecuteResultSet(ResultSetOptions.Scrollable | ResultSetOptions.Updatable);

  使用联接

  如果用来打开键集驱动游标的查询包含联接的列,则这些列不可更新。 用户可以向这些列中插入新值,但不支持更新。

  如果键集被用来填充用户可更新的控件(如 DataGrid 对象),则用户可能会试图更新控件中的值,此时更新将失败。 如果要开发的应用程序将使用 DataGrid 来显示联接的列数据,请确保在 DataGrid 中将联接的列设置为只读。

0
相关文章