调用子例程作为 SQL 事务的一部分

Calling a subroutine as part of a SQL Transaction

我的项目是一个订单应用程序,用户可以在其中输入来自不同客户的订单,使用 UltraGrid 输入和编辑数据。当按下键盘上的 Delete 键时,它会提示 MsgBox 以供用户确认他们要删除所选行,如果是,它会运行 DELETE 查询以从数据库。

我还有一个保存按钮,允许用户保存对订单所做的 order/changes。理想情况下,我只希望临时删除网格中的行,因为如果用户随后不保存订单,则不应从数据库中永久删除订单行。

如果我将 DELETE 查询放入一个单独的子例程中,我可以从我的 class 中调用这个子例程并将其保存为事务的一部分吗?

这似乎行不通,因为我不仅需要调用查询,而且还以某种方式将删除的行临时存储在某个地方,以便它知道要在事务中删除哪些数据,因为还有一个 Boolean 变量来告诉它是否有任何数据要删除...

有没有更简单的方法来做到这一点?上面的方法行得通吗?

最简单的方法是将所有更改(添加、修改和删除)保存在内存中,然后在您点击“保存”按钮时将它们同步到数据库。

可能,您需要一个 AJAX 操作来将操作添加到服务器端,并需要一个客户端脚本来更新网格上的行。

网格不适用于后端数据库。它只处理它的本地数据源。因此,当您将数据保存回数据库时,检查已删除的行并保留它们。

如果您只想在单击保存按钮时更新本地数据源,您可以设置网格的 UpdateMode to OnUpdate. Then you will need to call grid's UpdateData 方法。同样,这将更新您的本地数据源。本地数据源如何以及何时更新后端数据库与网格没有任何共同之处。因此,根据本地数据源的类型,您需要在将更新的数据发送回数据库之前检查已删除的行。

整理好了...其实根本不需要什么复杂的东西,只需要更改代码,如下所示:

Try
   Dim Dc As New OleDbCommand
   Dim rowcode As String = ""

         rowcode = dr.Item("Product_Code").Value

更改为:

Try
   Dim Dc As New OleDbCommand
   Dim rowcode As String = ""

         rowcode = dr.Item("Product_Code", DataRowVersion.Original)