Query.ExecSQL 之后是否需要 Query.Close?

And*_*w W 4 delphi tquery sql-insert

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

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

我的想法是,因为这是在数据库上执行的命令,大概不会向查询返回任何数据,所以不需要执行 Query.Close 但也许有人对什么有更深入的了解,如果有的话,可能会在调用 Query.ExecSQL 后返回并存储在查询中,对此 Query.Close 会有好处吗?

谢谢。

who*_*ddy 5

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

来自文档(强调我的):

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

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

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