Ejecutar procedure dentro de transacción

Muchas veces, cuando ejecutamos un procedure, necesitamos que si hay algún error dentro de todo el proceso, todo lo que se ha hecho hasta el momento, se revierta.

Para esto, es que existen las transacciones

Código C#

internal int Insertar(BE_Plantilla pBE_Plantilla)
{
  int mintReturn = 0;
  int mint = 0;
  int lintCod_Return = 0;
  
  SqlConnection mcn = (SqlConnection)FactoriaConnection.GetConnection(DbConnectionId.SQL);
  SqlCommand mcmd = new SqlCommand("PGCSI_PLANTILLA", mcn);
  try
  {
    mcn.Open();
    SqlTransaction mtr = mcn.BeginTransaction();
    mcmd.Transaction = mtr;
    mcmd.CommandType = CommandType.StoredProcedure;
    
    mcmd.Parameters.Add("@DES_PLANTILLA", SqlDbType.VarChar).Value = pBE_Plantilla.Des_Plantilla;
    mcmd.Parameters.Add("@ESTADO", SqlDbType.VarChar).Value = pBE_Plantilla.Estado;               
    
    mcmd.Transaction = mtr;
    mintReturn = (int)mcmd.ExecuteNonQuery();
    
    if (mintReturn > 0)
    {
      mtr.Commit();
    }
    else
    {
      mtr.Rollback();
    }
  }
  catch (Exception ex)
  {
    mintReturn = -2;
  }
  finally
  {
    if (mcn.State == ConnectionState.Open)
      mcn.Close();
    mcn.Dispose();
    mcmd.Dispose();               
  }
  return mintReturn;
}


Si desean el código vb.net, me lo piden y lo transformo.

De amor y otras tonterías - Parte 1: Inocencia

Antes de empezar:
Siempre quise hacer una historia, mezclando un poco (o mucho) de mis experiencias, con una que otra alucinada mía, y creo que ha llegado el momento de hacerlo.
Para que tengan una referencia, sería algo parecido al conocido blog y libro "Busco novia".
En realidad me encantarían sus comentarios, aunque sea para decir, tu historia es muy corta, o muy larga, o le falta esto, o le falta aquello. Prometo tomarlo como un sano consejo para ir mejorando las futuras historias.
Así que sin más que decir, veamos que surge.
PD: Obviamente todos los nombres vertidos en la historia serán cambiados para evitar inconvenienes

Atracción a primera vista

Existen personas (en mi caso, mujeres) a las cuales solo te basta conocer 5 minutos para empezar a alucinarte una relación larga y feliz con ella (sí, puede sonar algo exagerado, pero a mi me pasa de esa manera), y es que podría considerarse que se genera una "química" demasiado buena, demasiado "rica".

Clase de conexión VB.Net a SQL

Siempre es bueno tener a la mano una clase que encapsule todos los métodos de conexión con la BD, aqui les dejo una alternativa que yo siempre uso.

Obviamente tendrán que exportar los parámetros de conexion a un archivo .ini o xml si es que les parece más sencillo.

Imports System.Data
Imports System.Data.SqlClient
Imports System.Text

Module modConeccion
   Private cn As SqlConnection
   Private da As SqlDataAdapter
   Private dt As DataTable
   Private cm As SqlCommand
   Private dr As SqlDataReader

   Public Enum TipoProcesamiento
       NonQuery = 1
       Scalar = 2
       DataTable = 3
   End Enum


   Public Sub GeneraCadena(ByVal cServidor As String, ByVal cBase As String, ByVal cUsuario As String, ByVal cPassword As String)
       cn = New SqlConnection("Server=" & cServidor & ";Database=" & cBase & ";Uid=" & cUsuario & ";Pwd=" & cPassword & ";")
   End Sub

   Public Sub Conectar()
       GeneraCadena({SERVIDOR}, {BD}, {USUARIO}, {PASSWORD})
       cn.Open()
   End Sub

   Public Sub Desconectar()
       cn.Close()
       'cn.Dispose()
   End Sub

   Public Function EjecutarConsulta(ByVal cConsulta As String, ByVal cTipoProceso As TipoProcesamiento, Optional ByVal bAlerta As Boolean = True) As Object
       Try
           Conectar()
           If cTipoProceso = TipoProcesamiento.NonQuery Then
               cm = New SqlCommand(cConsulta, cn)
               cm.ExecuteNonQuery()
               Return True
           ElseIf cTipoProceso = TipoProcesamiento.Scalar Then
               cm = New SqlCommand(cConsulta, cn)
               Return cm.ExecuteScalar()
           ElseIf cTipoProceso = TipoProcesamiento.DataTable Then
               da = New SqlDataAdapter(cConsulta, cn)
               dt = New DataTable()
               da.Fill(dt)
               Return dt
           Else
               Throw New Exception("Tipo de procesamiento no válido")
           End If
       Catch ex As Exception
           If bAlerta = True Then
               MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Error")
           End If
           Return Nothing
       Finally
           Desconectar()
       End Try
   End Function

   Public Function EjecutarProcedure(ByVal cNombreProcedure As String, ByVal pParametros() As SqlParameter, ByVal cTipoProceso As TipoProcesamiento, Optional ByVal bAlerta As Boolean = True) As Object
       Try
           Conectar()
           Dim cm As New SqlCommand
           cm = New SqlCommand(cNombreProcedure, cn)
           cm.CommandType = CommandType.StoredProcedure
           cm.Parameters.AddRange(pParametros)

           If cTipoProceso = TipoProcesamiento.NonQuery Then
               cm.ExecuteNonQuery()
               Return True
           ElseIf cTipoProceso = TipoProcesamiento.Scalar Then
               Return cm.ExecuteScalar
           ElseIf cTipoProceso = TipoProcesamiento.DataTable Then
               da = New SqlDataAdapter(cm)
               dt = New DataTable()
               da.Fill(dt)
               Return dt
           Else
               Throw New Exception("Tipo de procesamiento no válido")
           End If
       Catch ex As Exception
           If bAlerta = True Then
               MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Error")
           End If
           Return Nothing
       Finally
           Desconectar()
       End Try
   End Function
End Module


Reemplazar los datos de conexion (encerrados por {}) de acuerdo a tus necesidades

Amores Platónicos

A cierta edad, los amores platónicos (actrices, cantantes, modelos, etc) marcan una etapa en nuestra vida, obviamente unos mas superficiales que otros.

Pero que pasa cuando conoces a tu amor platónico, cuando esa persona (en mi caso chica, obviamente ^^) está tan "cerca" de ti, pero obviamente, te ve y te trata tan solo como el super amigo, como el casi hermano, al que le cuenta toda su vida y todo lo que le hace el idiota con el que tiene una relación.

Bienvenida

El estudiar informática te robotiza un poco, te hace ser calculador, te hace pensar como un máquina ya que tienes q hacerle entender a una máquina lo que quieres que haga.

Un informático normalmente cuenta chistes que sólo otros informáticos entienden, las conversaciones más exitantes son sobre informática y muchos de sus sueños tienen que ver con...? Sí, adivinaron, la informática.

Pero fuera de esa pasión seguimos siendo humanos, por lo q también reimos, también lloramos, tambien nos parten el corazón (y luego lo tiran al suelo, lo pisotean, le pasan una aplanadora y lo incendian), también tenemos temores y también tenemos anecdotas.

Este blog pretende encontrar un equilibro entre mis experiencias como programador (pondré códigos, articulos, videos, chistes, etc) que quizas le sirvan solamente a otros programadores, pero también compartiré parte de mi, parte de la vida de César Bravo.

Creo que no queda nada más que decir, salvo el hecho de esperar que mis post sean totalmente de su agrado

Muchas gracias por todo