none
como utilizar transaction scope con multiples using vb.net RRS feed

  • Pregunta

  • Tengo este metodo que actualiza en una table y borra en otra, quiero poder usar el transaction scope para unir estos dos en una sola transaccion, quiero que se fijen bien que los dos using estan dentro de un mismo public sub y no en dos distintos, por eso necesito aplicar transaction scope de esta forma, gracias

      Public Sub actualizar_Matricula()
    
            Dim promedio As Decimal = 0.0
            Dim Puntos As Integer = 0
    
            Try
                Using cnn As New SqlConnection(configuracion.ConnectionString)
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    cmd.CommandText = "UPDATE Matriculas_Tabla SET Semestre=@Semestre, Candidato_Graduacion=@Candidato_Graduacion where Num_Matricula=@Num_Matricula"
                    cmd.Parameters.Clear()
                    cmd.Parameters.AddWithValue("@Semestre", Convert.ToInt32(txtsemestrematricula.Text))
                    cmd.Parameters.AddWithValue("@Num_Matricula", Convert.ToInt32(txtidmatricula.Text))
                    cmd.Parameters.AddWithValue("@Candidato_Graduacion", Convert.ToBoolean(chkcandidatograduacion.Checked))
                    cnn.Open()
                    cmd.ExecuteNonQuery()
                    cnn.Close()
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    
            Using cnn As New SqlConnection(configuracion.ConnectionString)
                cnn.Open()
                Dim cmd As SqlCommand = cnn.CreateCommand()
                For Each row As DataGridViewRow In datagridlista.SelectedRows
                    cmd.Parameters.Clear()
                    cmd.CommandText = "Delete From Matricula_Detalles_Tabla Where Codigo_Clase = @Codigo_Clase"
                    With cmd.Parameters
                        .AddWithValue("@Codigo_Clase", Convert.ToString(row.Cells("Codigo_Clase").Value))
                    End With
                    cmd.ExecuteNonQuery()
                Next
                MessageBox.Show("Matrícula Actualizada")
            End Using
    
        End Sub

    lunes, 4 de enero de 2016 20:35

Respuestas

  • Hola:
    Prueba con esto

        Public Sub actualizar_Matricula()
            Dim promedio As Decimal = 0.0
            Dim Puntos As Integer = 0
            Try
                Using cnn As New SqlConnection(configuracion.ConnectionString)
                    cnn.Open()
                    'Iniciamos una transaccion; hay que añadir la Referencia System.Transactions
                    Using MiTransaccion As New Transactions.TransactionScope
                        Dim lsQuery As String = "UPDATE Matriculas_Tabla SET Semestre=@Semestre, Candidato_Graduacion=@Candidato_Graduacion where Num_Matricula=@Num_Matricula"
                        Using cmd As New SqlCommand(lsQuery, cnn)
                            'añadir parametros al comando
                            cmd.Parameters.AddWithValue("@Semestre", Convert.ToInt32(txtsemestrematricula.Text))
                            cmd.Parameters.AddWithValue("@Candidato_Graduacion", Convert.ToBoolean(chkcandidatograduacion.Checked))
                            cmd.Parameters.AddWithValue("@Num_Matricula", Convert.ToInt32(txtidmatricula.Text))
                            cmd.ExecuteNonQuery()
                        End Using
                        '
                        For Each row As DataGridViewRow In datagridlista.SelectedRows
                            lsQuery = "Delete From Matricula_Detalles_Tabla Where Codigo_Clase = @Codigo_Clase"
                            Using cmd As New SqlCommand(lsQuery, cnn)
                                cmd.Parameters.AddWithValue("@Codigo_Clase", Convert.ToString(row.Cells("Codigo_Clase").Value))
                                cmd.ExecuteNonQuery()
                            End Using
                        Next
                        MiTransaccion.Complete()
                    End Using
                End Using
                MessageBox.Show("Matrícula Actualizada")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    P.D.
    Mira el siguiente enlace
    https://social.msdn.microsoft.com/Forums/es-ES/6882fe25-4353-4cef-ac62-7bcb5afaf95e/problemas-al-grabar-en-base-de-datos-desde-codigo-vbnet-transaction-scope?forum=vbes

    Un saludo desde Bilbo
    Carlos

    martes, 5 de enero de 2016 6:59