2009-12-11 7 views
0

Je suis en train de créer une transaction ado.net dans IronPython dans asp.net et j'obtiens l'erreur suivante "Impossible de trouver membre Rollback"Je ne peux pas créer une transaction ado.net dans IronPython

J'ai essayé de voir ce qui est différent dans ma transaction ironpython ado.net avec une transaction vb.net ado.net mais je ne peux pas voir les différences ou trouver la raison pour laquelle on ne travaille pas et l'autre le fait. Peut-être que je ne suis pas voir quelque chose, ce sont les codes d'essai

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() 

Quelque chose d'autre à dire qu'il est l'inspecteur d'objets montre des objets très différents. Lorsque VB.NET dit

objTransaction System.Data.SqlClient.SqlTransaction

  • Connexion System.Data.SqlClient.SqlConnection
  • IsolationLevel ReadCommitted (4096)

IronPython dit objTransaction Microsoft .Scripting.BoundBuiltinFunction avec un ensemble plus large de sous-éléments. Cela signifie probablement quelque chose lié au problème, mais je n'ai pas le niveau technique pour le savoir. Il existe des références à l'objet lié à une transaction ado.net, comme "public member" -> instance -> "System.Data.SqlClient.SqlTransaction". IronPython crée-t-il l'objet dont j'ai besoin ou crée-t-il simplement un autre type d'objet et c'est pour cela que je reçois l'erreur?

+1

BeginTransaction() <- crochets manquants? – JulianM

+0

droite, c'était :) :) – Pablo

+0

si vous postez votre commentaire comme une réponse, je vais l'accepter :) – Pablo

Répondre

1

Je pense que vous pouvez avoir une erreur de syntaxe mineure. Essayez d'ajouter entre parenthèses après BeginTransaction, comme suit:

objTransaction = conpubs.BeginTransaction() 
Questions connexes