事务Sql在提交后不保存在表上

时间:2017-03-27 16:36:44

标签: sql-server vb.net

我有一个保存在两个不同存储过程中的函数,这是我第一次尝试在VB上使用Transaction SQL,当我执行我的过程时它返回插入的新行的ID,但是我检查了在数据库中,该行不存在。它不会返回任何错误,但事务不会保存在数据库中。

   Using nwConexion As New SqlConnection(My.Settings.BoletasConnectionString)
            nwConexion.Open()

            Command = New SqlCommand("SP_Boletas_Retenciones", nwConexion)
            Command.CommandType = CommandType.StoredProcedure

            Try
                Dim ip As String = Net.Dns.GetHostByName(Environment.MachineName).AddressList(0).ToString()
                ' 'Start a local transaction

                Transaction = nwConexion.BeginTransaction("Trans " & ip)

                Command.Transaction = Transaction
                'Parametros a Utilizar
                Command.Parameters.AddWithValue("@Accion", Accion)
                Command.Parameters.AddWithValue("@IdBoleta", IdBoleta)
                Command.Parameters.AddWithValue("@IdCliente", IdCliente)
                Command.Parameters.AddWithValue("@Titulo", Titulo)
                Command.Parameters.AddWithValue("@IdTipo", IdTipo)
                Command.Parameters.AddWithValue("@IdCAI", IdCAI)
                Command.Parameters.AddWithValue("@Numero_Autorizacion", Numero_Autorizacion)
                Command.Parameters.AddWithValue("@Fecha", Fecha)
                Command.Parameters.AddWithValue("@Total", Total)
                Command.Parameters.AddWithValue("@IdRepresentante", IdRepresentante)
                Command.Parameters.AddWithValue("@Concepto", Concepto)

                Dim ID As Integer
                If Accion = "INSERT" Then
                    Command.Parameters.Add("@ID", SqlDbType.Int)
                    Command.Parameters("@ID").Direction = ParameterDirection.Output
                End If

                Command.ExecuteNonQuery()

                If Accion = "INSERT" Then
                    ID = Command.Parameters("@ID").Value
                Else
                    ID = IdBoleta
                End If

                Return ID

                If LTable = False Then

                Else

                    'Borramos primero la tabla antes de insertar si ya hay registros
                    Consulta_Detalle_Retencion(Accion:="DELETE", IdBoleta:=ID)

                    For Each dtRw As DataRow In DetalleRetención.Rows
                        Command = New SqlCommand("SP_Detalle_Retencion", nwConexion)
                        Command.CommandType = CommandType.StoredProcedure

                        'Command.Transaction = pTransaccion

                        'Parametros a Utilizar
                        Command.Parameters.AddWithValue("@Accion", Accion)
                        Command.Parameters.AddWithValue("@IdBoleta", ID)
                        Command.Parameters.AddWithValue("@NumeroDocumentoFiscal", dtRw("NumeroDocumentoFiscal"))
                        Command.Parameters.AddWithValue("@Fecha_Emision", dtRw("Fecha_Emision"))
                        Command.Parameters.AddWithValue("@DescripcionImpuestoRetenido", dtRw("DescripcionImpuestoRetenido"))
                        Command.Parameters.AddWithValue("@Base_Imponible", dtRw("Base_Imponible"))
                        Command.Parameters.AddWithValue("@Porcentaje_Retencion", dtRw(" Porcentaje_Retencion"))
                        Command.Parameters.AddWithValue("@Monto_Retenido", dtRw("Monto_Retenido"))
                        Command.Parameters.AddWithValue("@CAI_del_Cliente", dtRw(" CAI_del_Cliente"))

                        'ConexionSQL.Open()
                        Command.ExecuteNonQuery()
                        'Accion_Detalle_Retencion(Accion:="INSERT", IdBoleta:=ID,
                        '                         NumeroDocumentoFiscal:=dtRw("NumeroDocumentoFiscal"),
                        '                         Fecha_Emision:=dtRw("Fecha_Emision"),
                        '                         DescripcionImpuestoRetenido:=dtRw("DescripcionImpuestoRetenido"),
                        '                         Base_Imponible:=dtRw("Base_Imponible"),
                        '                         Porcentaje_Retencion:=dtRw("Porcentaje_Retencion"),
                        '                         Monto_Retenido:=dtRw("Monto_Retenido"),
                        '                         CAI_del_Cliente:=dtRw("CAI_del_Cliente"),
                        '                         pTransaccion:=Transaction, ConexionSQL:=ConexionSQL)
                    Next
                End If

                ''una vez finalizado el proceso terminamos la transaccion
                Transaction.Commit()

            Catch ex As Exception
                MensajeError(ex, "Error de Transaccion Tabla Boleta/Retencion")
                Try
                    Transaction.Rollback()
                    MsgBox("¡No se guardo los cambios!", MsgBoxStyle.Information, "Aviso")
                Catch ex2 As Exception
                    MensajeError(ex, "Error RollBack Exception Boleta/Retencion")
                End Try
                Return 0
            End Try
        End Using
        'ConexionSQL.Close()
        'MsgBox("La conexion se cerror", MsgBoxStyle.Information, "Aviso")
        'ConexionSQL.Dispose()
        'Command.Dispose()
    Catch ex As Exception
        MensajeError(ex, "Error - No se puedo ejecutar la operacion, Tabla Boleta/Retencion")
    End Try

0 个答案:

没有答案