0

我正在使用 adOpenDynamic,默认情况下 CursorLocation 设置为 Server (V6),我们的程序可以同时使用 access 和 SQL Server。现在我们遇到了一个返回-1 的recordCount 问题。我找到了以下解决方案:

将 CursorLocation 从服务器更改为客户端或将 CursorLocation 保持为客户端并将 adOpenDynamic 更改为 adOpenStatic 或 adOpenKeyset。基于 Dynamic 和 Keyset 之间的相似性,似乎最好用 adOpenKeySet 更改它。

现在这是我的问题,您认为保留 adOpenDynamic 并将 CursorLocation 更改为 Client 还是保留服务器并将 adOpenDynamic 更改为 KeySet 更好?

谢谢你。

4

1 回答 1

0

答案是肯定的和否定的。

存在这些不同的选项是有原因的,它最归结为功能和性能。

将光标位置设置为服务器后,您将不会一次“获取”所有数据。其中一些会回来,其余的将保留在服务器上,直到您请求它为止。当您移动到记录集中的下一条记录时,该请求正在完成。当您有一个非常大的记录集时,这通常对性能更好,因为您的应用程序可以在所有数据都通过网络设置之前开始使用数据。这对于网络使用来说并不是那么好,因为会发生很多往返“对话”。这对服务器也不是很好,因为您在关闭记录集之前一直在消耗服务器资源。

当您使用客户端游标时,所有数据都会尽快通过网络传递,但您的应用程序在数据全部传递到客户端之前无法使用这些数据。对于大型记录集,这可能需要一段时间,因此您的应用程序可能会滞后。客户端记录集对服务器和网络友好,但由于延迟,客户端更难。

这样想……假设您有很多数据要在网格中显示。使用服务器光标,您可以显示数据的第一“页”。然后,当用户在网格上向下滚动时,您会抓取接下来的 20 行并显示它们。因此,每次用户滚动时,都会有轻微的滞后(可能不明显)。使用客户端光标,所有数据都需要加载到网格中,然后用户才能对其进行任何操作。

在我的应用程序中,我非常小心只从数据库返回我需要的数据(我限制了列和行)。我几乎总是你一个带有 adOpenStatic 的客户端光标。基本上,我调用数据库,获取数据,然后尽快关闭记录集。然后我为插入、更新和删除发出单独的 sql 语句。

我对您的最佳建议是首先了解所有这些选项对您有什么作用,然后使用正确的选项。这可能意味着您最终将在整个应用程序中使用多种方法,具体取决于您需要的功能。

于 2013-10-25T12:56:26.367 回答