none
Mostrar procedimiento almacenado qur contiene 3 consultas en 3 datagridView para cada consulta RRS feed

  • Pregunta

  • Tengo el siguiente procedimiento almacenado:

    CREATE PROCEDURE SP_Recaudación 
    	@Mes int,
    	@Año int
    AS
    --Recaudaciones por habitaciones
    SELECT
    	SUM(hr.precio) AS [Total Habitaciones]
    FROM habitacion_reserva hr
    WHERE MONTH(hr.fecha_entrada) = @Mes AND YEAR(hr.fecha_entrada) = @Año
    --Recaudaciones por servicios
    SELECT 
    	SUM(cs.precio) AS [Total Servicios]
    FROM servicio s
    INNER JOIN cargos_servicios cs ON cs.id_servicio = s.id_servicio
    INNER JOIN habitacion_reserva hr ON hr.id_hab_reserva = cs.id_hab_reserva
    WHERE MONTH(hr.fecha_entrada) = @Mes AND YEAR(hr.fecha_entrada) = @Año
    --Empleados
    
    DECLARE @TotalServicio money
    SET @TotalServicio = (
    	SELECT
    		ROUND(SUM(cs.precio), 2)
    	FROM servicio s
    	INNER JOIN cargos_servicios cs ON cs.id_servicio = s.id_servicio
    	INNER JOIN habitacion_reserva hr ON hr.id_hab_reserva = cs.id_hab_reserva
    	WHERE MONTH(hr.fecha_entrada) = @Mes AND YEAR(hr.fecha_entrada) = @Año
    )
    
    SELECT
    	e.p_nom +' '+ e.p_apell AS Nombre,
    	ROUND((@TotalServicio * 15/100), 2) AS Comisión
    FROM empleado e
    INNER JOIN reserva r ON r.id_empleado = e.id_empleado
    INNER JOIN habitacion_reserva hr ON hr.id_reserva = r.id_reserva
    WHERE MONTH(hr.fecha_entrada) = @Mes AND YEAR(hr.fecha_entrada) = @Año
    GROUP BY e.p_nom, e.p_apell

    El cual quiero mostrar en 3 datagridView distintos, ya que, ese procedimiento muestra 3 consultas distintas. Este es el código de mi conexión al procedimiento almacenado:

    public DataTable Recaudacion(int mes, int año)
            {
                DataTable DtResultado = new DataTable("Recaudacion");
                SqlConnection SqlCon = new SqlConnection();
                try
                {
                    SqlCon.ConnectionString = Conexión.Cn;
                    SqlCommand SqlCmd = new SqlCommand();
                    SqlCmd.Connection = SqlCon;
                    SqlCmd.CommandText = "SP_Recaudación";
                    SqlCmd.CommandType = CommandType.StoredProcedure;
    
                    SqlParameter ParMes = new SqlParameter();
                    ParMes.ParameterName = "@Mes";
                    ParMes.SqlDbType = SqlDbType.Int;
                    ParMes.Size = 60;
                    ParMes.Value = mes;
                    SqlCmd.Parameters.Add(ParMes);
    
                    SqlParameter ParYear = new SqlParameter();
                    ParYear.ParameterName = "@Año";
                    ParYear.SqlDbType = SqlDbType.Int;
                    ParYear.Size = 60;
                    ParYear.Value = año;
                    SqlCmd.Parameters.Add(ParYear);
    
                    SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);
                    SqlDat.Fill(DtResultado);
    
                }
                catch (Exception ex)
                {
                    DtResultado = null;
                }
                return DtResultado;
            }

    Y aquí es donde muestro los datos en el dataGridView:

    private void btnFactura_Click(object sender, EventArgs e)
            {
                
                if (txtMes.Text == "" || txtAño.Text == "")
                {
                    MessageBox.Show("Los campos no contienen datos");
                }
                else
                {
                    
                    int mes = Convert.ToInt32(txtMes.Text);
                    int año = Convert.ToInt32(txtAño.Text);
    
                    this.dataGridView1.DataSource = NDisponibilidadhabitacion.Recaudacion(mes, año);
    
    
    
                }
            }

    sábado, 30 de marzo de 2019 17:22

Respuestas

  • Hola, podrías llenar un dataset , y acceder  a los tables en el

      public  DataSet Recaudacion(int mes, int año)    
      { 
       DataSet ds = new DataSet();
       .........
       SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);
       SqlDat.Fill(ds);
       return ds;
      }

    y en el click del botón

     DataSet ds = new DataSet();
     ds = Recaudacion(mes, anio);
     dataGridView1.DataSource = ds.Tables[0];
     dataGridView2.DataSource = ds.Tables[1];
     dataGridView3.DataSource = ds.Tables[2];


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Editado Augusto1982 sábado, 30 de marzo de 2019 18:02
    • Marcado como respuesta Jordy4VZ sábado, 30 de marzo de 2019 18:19
    sábado, 30 de marzo de 2019 17:51

Todas las respuestas

  • Hola, podrías llenar un dataset , y acceder  a los tables en el

      public  DataSet Recaudacion(int mes, int año)    
      { 
       DataSet ds = new DataSet();
       .........
       SqlDataAdapter SqlDat = new SqlDataAdapter(SqlCmd);
       SqlDat.Fill(ds);
       return ds;
      }

    y en el click del botón

     DataSet ds = new DataSet();
     ds = Recaudacion(mes, anio);
     dataGridView1.DataSource = ds.Tables[0];
     dataGridView2.DataSource = ds.Tables[1];
     dataGridView3.DataSource = ds.Tables[2];


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Editado Augusto1982 sábado, 30 de marzo de 2019 18:02
    • Marcado como respuesta Jordy4VZ sábado, 30 de marzo de 2019 18:19
    sábado, 30 de marzo de 2019 17:51
  • Así era, Augusto. Muchas gracias.
    sábado, 30 de marzo de 2019 18:20