当使用 insert、delete 或 update 语句修改数据库的内容时,只有当数据库接收到 来自 Net.Data 的 commit 语句,这些修改才会变为永久性的修改。如果发生错误,Net.Data 将 向数据库发送一个 rollback 语句,撤消上一次确认 (commit) 之后所作的全部修改。
Net.Data 发送 commit 和 rollback 的方式取决于 TRANSACTION_SCOPE 的设置以及宏中是否 显式地指定了 commit。TRANSACTION_SCOPE 的值可以是 MULTIPLE 和 SINGLE。
指定 Net.Data 将在发出 commit 以及可能的 rollback 语句之前执行所有 的 SQL 语句。Net.Data 在请求的最后发送 commit,如果每个 SQL 语句都已成功发出,commit 命令 将使数据库中所有的修改都变为永久性的修改。如果其中有任何一个语句返回错误,Net.Data 都将 发出一个 rollback 语句,该语句将把数据库设置回原来的状态。如果没有 TRANSACTION_SCOPE, 则缺省值是 MULTIPLE。
要激活这种 commit 方式,可将 TRANSACTION_SCOPE 设置为 MULTIPLE。
例如:
@DTW_ASSIGN(TRANSACTION_SCOPE,"MULTIPLE")
指定 Net.Data 在每个成功完成的 SQL 语句后都发出一个 commit 语句。如果 SQL 语句返回错误, 则发出一个 rollback 语句。单次事务作用域确保了数据库修改的立即性;但是使用此作用域之后, 今后就不可能使用 rollback 语句来撤消所做的修改。
要激活这种 commit 方式, 可将 TRANSACTION_SCOPE 设置为 SINGLE。例如:
@DTW_ASSIGN(TRANSACTION_SCOPE,"SINGLE")
通过使用 COMMIT SQL 语句,就可以在宏中每个 SQL 语句之后发出一个 commit 语句。保持 TRANSACTION_SCOPE 设置 为 MULTIPLE 的状态并在您觉得可以作为一个事务来对待的每组语句的最后发出 commit 语句,这样, 您这个应用程序开发者就可以对应用程序中的 commit 和 rollback 进行完全的控制。
要发出 SQL commit 语句,可以定义一个能在 HTML 块中任意位置调用的函数:
%FUNCTION(DTW_SQL) user_commit() {
commit
%}
...
%HTML {
...
@user_commit()
...
%}