我正在学习如何在Visual Studio 2008中使用transactionScope
和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
谢谢
答案 0 :(得分: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注入等)。如果只是为了这个例子,那么:没问题。