我有一个保存在两个不同存储过程中的函数,这是我第一次尝试在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