none
DUDA TRANSACCION!!! RRS feed

  • Pregunta

  • Hola, que tal ? Estoy desarrollando una transaccion en c# y tengo dudas con respecto a como lo implemente. Necesito por favor que alguien me diga que hacer porque ha llegado un punto en el que me estanque y no puedo seguir avanzando. El error que me aparece cuando voy a registrar un pedido es el siguiente: "ExecuteNonQuery requiere que el comando tenga una transacción cuando la conexión asignada al mismo está en una transacción local pendiente. No se ha inicializado la propiedad Transaction del comando". Les adjunto una copia del codigo para que se entienda.

    PD: Ya se que una transaccion sirve cuando trabajas sobre dos o mas tablas, puse una sola para ver si me anda los comandos propios de la transaccion.

    CLASE CPEDIDOSCLIENTES:

                                      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.Data.SqlClient;

    namespace CapaDatos
    {
        public class DPedidosCliente
        {
            CD_Conexion conexion = new CD_Conexion();
            DataTable tabla = new DataTable();
            SqlCommand comando = new SqlCommand();

            public void crearPedido(string descripcion, int idCliente, string idRepartidor, double montoTotal, DateTime fecha)
            {
                try
                {
                    comando.Connection = conexion.AbrirConexion();
                    conexion.BeginTransaction();
                    comando.CommandText = "INSERT INTO PEDIDOSCLIENTES VALUES ('" + descripcion + "','" + idCliente + "','" + idRepartidor + "','" + montoTotal + "','" + fecha + "')";
                    comando.ExecuteNonQuery();
                    conexion.Commit();
                    conexion.CerrarConexion();
                }
                catch
                {
                    conexion.Rollback();
                }
                finally
                {
                    conexion.CerrarConexion();
                }

            }
        }

    CLASE CD_CONEXION:

                    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Data;
    using System.Data.SqlClient;

    namespace CapaDatos
    {
        public class CD_Conexion
        {
            SqlConnection Conexion = new SqlConnection(@"Data Source=TOSHIBA\SQLEXPRESS;Initial Catalog=baseDeDatosDeliverySeñorGula;Integrated Security=True");

            SqlTransaction Transaccion;

            public SqlConnection AbrirConexion()
            {
                if (Conexion.State == ConnectionState.Closed)
                    Conexion.Open();
                return Conexion;
            }
            public SqlConnection CerrarConexion()
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
                return Conexion;
            }

            public void BeginTransaction()
            {
                if (Conexion.State == ConnectionState.Open)
                    Transaccion = Conexion.BeginTransaction();
            }

            public void Commit()
            {
                if (Transaccion != null)
                    Transaccion.Commit();
            }

            public void Rollback()
            {
                if (Transaccion != null)
                    Transaccion.Rollback();
            }
        }
    }

    Agradeceria muchisimo la ayuda

    viernes, 19 de octubre de 2018 22:38

Respuestas