none
DUDA TRANSACCION RRS feed

  • Pregunta

  • Hola que tal? Estoy desarrollando una aplicacion que va a llevar a cabo una transaccion en la cual se va a generar un pedido y los detalles del mismo, ademas de actualizar una tabla productos donde uno de los atributos es la cantidad. El problema resulta en que no se como manejar las sentencias de transaccion; no se cuales son las sentencias necesarias ni donde deberia colocarlas debido a que estoy trabajando con una programacion en capas. Para poder entender de mejor manera la situacion, adjunto una copia del codigo determinando que codigo va en cada capa. Muchas gracias

    Capa Datos:

    public object crearPedido(string descripcion, int idCliente, string idRepartidor, double montoTotal, DateTime fecha)
            {
                comando.Connection = conexion.AbrirConexion();
                comando.CommandText = "INSERT INTO PEDIDOSCLIENTES VALUES ('"+ descripcion +"','"+ idCliente +"','"+ idRepartidor +"','"+ montoTotal +"','"+ fecha +"')";
                comando.ExecuteNonQuery();
                comando.CommandText = "SELECT @@IDENTITY";
                object identity = comando.ExecuteScalar();
                return identity;
                
            }

    Capa Negocio:

    DPedidosCliente pedido = new DPedidosCliente();
            public object crearPedidos(string descripcion, string idCliente, string idRepartidor, string montoTotal, string fecha)
            {
                
                object identity = pedido.crearPedido(descripcion, Convert.ToInt32(idCliente), idRepartidor, Convert.ToDouble(montoTotal), Convert.ToDateTime(fecha));
                return identity;
            }

    Capa Presentacion:

    private void btnGrabar_Click(object sender, EventArgs e)
            {
                int suma = 0;
                for (int fila = 0; fila < dgvItemsPedido.Rows.Count - 1; fila++)
                {
                    suma +=  Convert.ToInt32(dgvItemsPedido.Rows[fila].Cells["precio"].Value);
                   
                }
                NPedidosClientes pedido = new NPedidosClientes();
                string identity = Convert.ToString(pedido.crearPedidos(txtDescripcion.Text, Convert.ToString(cmbCliente.SelectedValue), Convert.ToString(cmbRepartidor.SelectedValue), suma.ToString(), DateTime.Now.ToString()));
                for (int fila = 0; fila < dgvItemsPedido.Rows.Count -1; fila++)
                {
                    NDetallePedidos detalle = new NDetallePedidos();
                    detalle.insertarClientes(identity, dgvItemsPedido.Rows[fila].Cells["Producto"].Value.ToString(), dgvItemsPedido.Rows[fila].Cells["Cantidad"].Value.ToString(), dgvItemsPedido.Rows[fila].Cells["Precio"].Value.ToString());
                    NProductos producto = new NProductos();
                    producto.actualizarProductos(dgvItemsPedido.Rows[fila].Cells["Producto"].Value.ToString(), dgvItemsPedido.Rows[fila].Cells["Cantidad"].Value.ToString());
                }
            }private void btnGrabar_Click(object sender, EventArgs e)
            {
                int suma = 0;
                for (int fila = 0; fila < dgvItemsPedido.Rows.Count - 1; fila++)
                {
                    suma +=  Convert.ToInt32(dgvItemsPedido.Rows[fila].Cells["precio"].Value);
                   
                }
                NPedidosClientes pedido = new NPedidosClientes();
                string identity = Convert.ToString(pedido.crearPedidos(txtDescripcion.Text, Convert.ToString(cmbCliente.SelectedValue), Convert.ToString(cmbRepartidor.SelectedValue), suma.ToString(), DateTime.Now.ToString()));
                for (int fila = 0; fila < dgvItemsPedido.Rows.Count -1; fila++)
                {
                    NDetallePedidos detalle = new NDetallePedidos();
                    detalle.insertarClientes(identity, dgvItemsPedido.Rows[fila].Cells["Producto"].Value.ToString(), dgvItemsPedido.Rows[fila].Cells["Cantidad"].Value.ToString(), dgvItemsPedido.Rows[fila].Cells["Precio"].Value.ToString());
                    NProductos producto = new NProductos();
                    producto.actualizarProductos(dgvItemsPedido.Rows[fila].Cells["Producto"].Value.ToString(), dgvItemsPedido.Rows[fila].Cells["Cantidad"].Value.ToString());
                }
            }

    viernes, 19 de octubre de 2018 16:06

Respuestas

Todas las respuestas

  • hola

    usa el TransacionScope

    Implementar una transacción implícita mediante el ámbito de la transacción

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Lucas Ca viernes, 19 de octubre de 2018 19:34
    viernes, 19 de octubre de 2018 16:33
  • ademas usa parametros

    public int crearPedido(string descripcion, int idCliente, string idRepartidor, double montoTotal, DateTime fecha)
    {
    	var Connection = conexion.AbrirConexion();
    	string query = "INSERT INTO PEDIDOSCLIENTES VALUES (@descripcion, @qidCliente, @idRepartidor,@montoTotal, @fecha); SELECT SCOPE_IDENTITY";
    	SqlCommand comando = new SqlCommand(sql, Connection)
    	comando.Parameters.AddWithValue("@descripcion", descripcion);
    	comando.Parameters.AddWithValue("@idCliente", idCliente);
    	comando.Parameters.AddWithValue("@idRepartidor", idRepartidor);
    	comando.Parameters.AddWithValue("@montoTotal", montoTotal);
    	comando.Parameters.AddWithValue("@fecha", fecha);
    	
    	return Convert.ToInt32(comando.ExecuteScalar());
    	
    } 

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 19 de octubre de 2018 16:37