4

在 Delphi 中,每当我使用 TQuery 在数据库上执行 SELECT 时,我都会在 Query.Open 之后使用 try..finally,在 finally 部分使用 Query.Close。这对我来说很有意义,因为查询仍然会不必要地存储数据(使用内存)。

但是我的问题与我使用 Query 执行 INSERT 或 DELETE 时有关,因此需要使用 Query.ExecSQL 执行 SQL 我的问题是,我必须在 Query.ExecSQL 之后使用 Query.Close 吗?

我的想法是,因为这是一个要在数据库上执行的命令,它可能不会将任何数据返回给 Query,所以不需要执行 Query.Close 但也许有人对什么有更深入的了解,如果有的话,可能会在调用 Query.ExecSQL 之后返回并存储在 Query 中,对于这 Query.Close 会是有益的吗?

谢谢你。

4

1 回答 1

5

不,它不需要,因为ExecSQL不维护记录集。

文档(强调我的):

执行查询的 SQL 语句。调用 ExecSQL 以执行当前分配给 SQL 属性的 SQL 语句。使用 ExecSQL 执行不向数据返回游标的查询(例如 INSERT、UPDATE、DELETE 和 CREATE TABLE)。

注意:对于 SELECT 语句,调用 Open 而不是 ExecSQL。

如果尚未准备好,ExecSQL 会准备 SQL 属性中的语句以供执行。为了提高性能,应用程序通常应该在第一次调用 ExecSQL 之前调用 Prepare。

于 2014-10-03T13:41:26.803 回答