Я не могу создать транзакцию 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()
Другие вопросы по тегам