none
Como Hacer un Roll Back de un Insert en un Try RRS feed

  • Pregunta

  • Hola a Todos.

    Estoy haciendo una pagina web en VWD2010, Tengo la siguiente rutina para hacer un insert:

    Public Sub InsertPerfil(ByVal ID As String, ByVal Descripcion As String)
      Try
        SqlConexion = GetConexionDB()
    
        Comando = New SqlCommand( _
                "INSERT INTO PERFILES " & _
                "VALUES " & _
                "(@ID, @DESCRIPCION)", SqlConexion)
        SqlConexion.Open()
    
        Comando.Parameters.AddWithValue("@ID", ID)
        Comando.Parameters.AddWithValue("@DESCRIPCION", Descripcion)
        Comando.ExecuteNonQuery()
      Catch ex As Exception
        Throw ex
      Finally
        SqlConexion.Close()
        SqlConexion.Dispose()
      End Try
    End Sub
    
    

    Pero quisiera hacer un rollback en el catch de otros inserts que se realizaron antes.

    ¿como genero, hago, llamo o forzo un rollback?

    Gracias,

    Salu2

    miércoles, 27 de julio de 2011 16:32

Respuestas

  • Hola Felipe.

    Primero te dejo un artículo de MSDN en el que puedes encontrar toda la información al respecto. http://msdn.microsoft.com/en-us/library/86773566.aspx#Y800

    Y ahora te paso un ejemplo de cómo podría quedarte.

     

        SqlConexion = GetConexionDB()
        transaction = SqlConexion.BeginTransaction("SampleTransaction")
     
        Comando = New SqlCommand( _
                "INSERT INTO PERFILES " & _
                "VALUES " & _
                "(@ID, @DESCRIPCION)", SqlConexion)
        SqlConexion.Open()
     
        Comando.Transaction = transaction
     
        Comando.Parameters.AddWithValue("@ID", ID)
        Comando.Parameters.AddWithValue("@DESCRIPCION", Descripcion)
        Comando.ExecuteNonQuery()
        transaction.Commit()
      Catch ex As Exception
        transaction.Rollback()
        Throw ex
      Finally
        SqlConexion.Close()
        SqlConexion.Dispose()
      End Try
    

    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    jueves, 28 de julio de 2011 0:26

Todas las respuestas

  • Hola Felipe.

    Primero te dejo un artículo de MSDN en el que puedes encontrar toda la información al respecto. http://msdn.microsoft.com/en-us/library/86773566.aspx#Y800

    Y ahora te paso un ejemplo de cómo podría quedarte.

     

        SqlConexion = GetConexionDB()
        transaction = SqlConexion.BeginTransaction("SampleTransaction")
     
        Comando = New SqlCommand( _
                "INSERT INTO PERFILES " & _
                "VALUES " & _
                "(@ID, @DESCRIPCION)", SqlConexion)
        SqlConexion.Open()
     
        Comando.Transaction = transaction
     
        Comando.Parameters.AddWithValue("@ID", ID)
        Comando.Parameters.AddWithValue("@DESCRIPCION", Descripcion)
        Comando.ExecuteNonQuery()
        transaction.Commit()
      Catch ex As Exception
        transaction.Rollback()
        Throw ex
      Finally
        SqlConexion.Close()
        SqlConexion.Dispose()
      End Try
    

    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    jueves, 28 de julio de 2011 0:26
  • Hola Santiago, ¿como es el link de tu articulo?

    F. Soto

    jueves, 28 de julio de 2011 13:42
  • Disculpa Felipe, no puse el link

    http://msdn.microsoft.com/en-us/library/86773566.aspx#Y800


    "En los momentos de crisis, sólo la imaginación es más importante que el conocimiento"
    jueves, 28 de julio de 2011 15:43
  • hola

    no ahs evaluado suar el TransactionScope

    con este simplemetne creas una session en la cual se define la transaccion, si al final ahces un scope.Complete() aceptas los cambios, sino haces nada se anularan automaticamente

    en el link ay un ejemplo de implementacion, veras es muy simple de usar

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 29 de julio de 2011 2:47