Я не могу создать транзакцию ado.net в IronPython

Я пытаюсь создать транзакцию 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 создает объект, который мне нужен, или просто создает объект другого типа, и поэтому я получаю сообщение об ошибке?


person Pablo    schedule 11.12.2009    source источник
comment
BeginTransaction () ‹- отсутствуют скобки?   -  person JulianM    schedule 14.12.2009
comment
если вы разместите свой комментарий в качестве ответа, я его приму :)   -  person Pablo    schedule 14.12.2009


Ответы (1)


Я думаю, у вас может быть небольшая синтаксическая ошибка. Попробуйте добавить скобки после BeginTransaction, как показано ниже:

objTransaction = conpubs.BeginTransaction()
person JulianM    schedule 15.12.2009