Я не могу создать транзакцию ado.net в IronPython
Я пытаюсь создать транзакцию ado.net в IronPython в asp.net, и я получаю следующую ошибку "Не удалось найти участника Rollback"
Я пытался увидеть, что отличается в моей транзакции IronPthon 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, например, "public member" -> instance -> "System.Data.SqlClient.SqlTransaction". IronPython создает нужный мне объект или просто создает объект другого типа, и поэтому я получаю сообщение об ошибке?
1 ответ
Я думаю, что вы можете иметь небольшую синтаксическую ошибку. Попробуйте добавить скобки после BeginTransaction следующим образом:
objTransaction = conpubs.BeginTransaction()