1

我正在学习如何transactionScope在 Visual Studio 2008 中与 Visual Basic.net 一起使用,我正在尝试轻松查询更新一些数据并启动异常,但transactionScope没有进行回滚,数据甚至已更新代码没有tran2.complete造句。

当我执行第二个查询时出现异常,因为字段 idLegacy 不存在。

谁能帮我?

        DB_MSSQL = New BBDD(ClassUtil.CadenaConexion_Destino)

        Using tran2 As New TransactionScope()
            Try
                Dim SqlPrueba As String = "UPDATE CAMPANIA_PEDIDOS set _idlegacy = -6 where Id = 151879"
                DB_MSSQL.dameDataSet(SqlPrueba)
                Dim SqlPrueba2 as String = "UPDATE CAMPANIA_PEDIDOS set idlegacy = -5 where Id = 151879"
                DB_MSSQL.dameDataSet(SqlPrueba2)
                tran2.Complete()
            Catch ex As TransactionAbortedException
                ClassUtil.PintaEnLog("Error al exportar pedido: " & ex.Message)
            End Try
        End Using

谢谢

4

1 回答 1

0

要自动登记,必须在环境事务中打开(或可能创建,但听起来更有可能打开)连接。例如:

    Using tran2 As New TransactionScope()
        Try
            DB_MSSQL = New BBDD(ClassUtil.CadenaConexion_Destino)
            Dim SqlPrueba As String = "UPDATE CAMPANIA_PEDIDOS set _idlegacy = -6 where Id = 151879"
            DB_MSSQL.dameDataSet(SqlPrueba)
            Dim SqlPrueba2 as String = "UPDATE CAMPANIA_PEDIDOS set idlegacy = -5 where Id = 151879"
            DB_MSSQL.dameDataSet(SqlPrueba2)
            tran2.Complete()
        Catch ex As TransactionAbortedException
            ClassUtil.PintaEnLog("Error al exportar pedido: " & ex.Message)
        End Try
    End Using

另外,假设DB_MSQL封装了一个连接,它可能也需要通过Using.

最后,我强烈建议您在构建 TSQL 时使用参数而不是串联 - 它更高效(服务器可以重用解析过的查询)和更安全(SQL 注入等)。如果这只是示例,那么:没问题。

于 2013-05-13T11:23:59.490 回答