Я пытаюсь создать транзакцию ado.net в IronPython в asp.net и получаю следующее сообщение об ошибке «не удалось найти откат участника»
Я попытался увидеть, чем отличается моя транзакция ironpython ado.net от транзакции vb.net ado.net, но я не вижу различий или не могу найти причину, по которой одна не работает, а другая работает. Возможно я просто чего-то не вижу, это тестовые коды
VB.NET
Partial Class prueba
Inherits sql_conexiones
Sub bt_aceptar_click(ByVal s As Object, ByVal e As EventArgs)
Dim objTransaction As SqlTransaction
Dim conpubs As SqlConnection = New SqlConnection("Persist Security Info=False;Data Source=PABLODALMA;Initial Catalog=SistemaHYM;User ID=sa;Password=usuario;Connect Timeout=180")
Dim strUpdateA As String = "UPDATE bancos SET descripcion_banco = 'prueba' WHERE cod_banco = 1"
Dim strUpdateB As String = "UPDATE bancos SET descripcion_banco = 'pruebados' WHERE cod_banco = 1"
Dim cmdUpdateA As SqlCommand
Dim cmdUpdateB As SqlCommand
cmdUpdateA = New SqlCommand(strUpdateA, conpubs)
cmdUpdateB = New SqlCommand(strUpdateB, conpubs)
conpubs.Open()
objTransaction = conpubs.BeginTransaction
Try
cmdUpdateA.ExecuteNonQuery()
cmdUpdateB.ExecuteNonQuery()
objTransaction.Commit()
Response.Write("ok")
Catch ex As Exception
objTransaction.Rollback()
Response.Write("no ok")
Finally
conpubs.Close()
End Try
End Sub
End Class
IronPython
import clr
clr.AddReference('System.Data') # Agrega espacio de nombres Data
from System.Data import * #uso esta forma para importar o la otra?
clr.AddReference('System')
import System # Agrega espacio de nombres System
def bt_aceptar_click(sender,e):
objTransaction = System.Data.SqlClient.SqlTransaction
conpubs = System.Data.SqlClient.SqlConnection("Persist Security Info=False;Data Source=PABLODALMA;Initial Catalog=SistemaHYM;User ID=sa;Password=usuario;Connect Timeout=180")
strUpdateA = "UPDATE bancos SET descripcion_banco = 'prueba' WHERE cod_banco = 1"
strUpdateB = "UPDATE bancos SET descripcion_banco = 'pruebados' WHERE cod_banco = 1"
cmdUpdateA = System.Data.SqlClient.SqlCommand(strUpdateA, conpubs)
cmdUpdateB = System.Data.SqlClient.SqlCommand(strUpdateB, conpubs)
conpubs.Open()
objTransaction = conpubs.BeginTransaction
try:
cmdUpdateA.ExecuteNonQuery()
cmdUpdateB.ExecuteNonQuery()
objTransaction.Commit()
Response.Write("ok")
except:
objTransaction.Rollback()
Response.Write("no ok")
else:
conpubs.Close()
Еще кое-что, чтобы сказать, что инспектор объектов показывает очень разные объекты. Когда VB.NET говорит
objTransaction System.Data.SqlClient.SqlTransaction
- Подключение System.Data.SqlClient.SqlConnection
- IsolationLevel ReadCommitted (4096)
IronPython говорит objTransaction Microsoft.Scripting.BoundBuiltinFunction с более широким набором подэлементов. Это, вероятно, означает что-то, связанное с проблемой, но у меня нет технического уровня, чтобы знать об этом. Есть некоторые ссылки на объект, связанный с транзакцией ado.net, например «открытый член» -> экземпляр -> «System.Data.SqlClient.SqlTransaction». IronPython создает объект, который мне нужен, или просто создает объект другого типа, и поэтому я получаю сообщение об ошибке?