none
Ayuda con store procedure y selección de datos RRS feed

  • Pregunta

  • Saludos tengo un sistema para una biblioteca en el cual almaceno el registro de todos los prestamos de libros que se han realizado, sin embargo me solicitaron que ademas del registro general se pueda visualizar el historico individual por libro, facilmente esto se puede hacer filtrando el libro en cuestion en el historico general pero lo que me pidieron es que al darle clic al historico de ese libro salgan sus datos y debajo todo su historico. Tengo algo como esto:


    planeo agregarle otra columna con un icono de historico pero no entiendo como manejarlo. el codigo que uso para eliminar por ejemplo es el siguiente:

     if (dgvLibro.Rows[e.RowIndex].Cells["Eliminar"].Selected)
                {
                    int eliminar = Convert.ToInt32(dgvLibro.Rows[e.RowIndex].Cells["Id"].Value.ToString());
                    DialogResult resultado = MessageBox.Show("Realmente deseas eliminar este libro?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (resultado == DialogResult.No)
                    {
                        return;
                    }
                    objNegocio.CN_EliminarLibro(eliminar);
                    LimpiarCampos();
                    btncancel.Visible = false;
                    btnnew.Text = "Registrar";
                    RellenarDgv();
                }
    y donde esta el store procedure es este:
    public void CN_EliminarLibro(int Id)
            {
                SqlCommand cmd = new SqlCommand("sp_DelLibro", conexion);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Id", Id);
                if (conexion.State == ConnectionState.Open) conexion.Close();
                conexion.Open();
                cmd.ExecuteNonQuery();
                conexion.Close();
            }

    En la tabla de prestamo se guardan todos los datos del prestamo asumo que tengo que hacer un select con un where id de libro(de la tabla libro) sea igual al id de libro(de la tabla prestamo) pero no me queda claro como hacer dicho store procedure y pasar estos datos al otro form que deberia quedar algo asi mas o menos:

    de antemano gracias por las posibles opciones ;D

    miércoles, 14 de agosto de 2019 1:47

Todas las respuestas

  • hola

    Mencionas que no sabes como hacerlo, pero segun lo que nos muestras ya lo estas realizando con el procedure del DELETE, el SELECT con un WHERE por ID es exactamente igual, solo cambia el DELETE por e SELECT, le pasas el parametro de la misma forma

    public DataTable CN_GetLibro(int Id)
    {
    	SqlCommand cmd = new SqlCommand("sp_GetLibro", conexion);
    	cmd.CommandType = CommandType.StoredProcedure;
    	cmd.Parameters.AddWithValue("@Id", Id);
    	
    	SqlDataAdapter da = new SqlDataAdapter(cmd);
    	DataTable dt = new DataTable();
    	da.Fill(dt);
    	
    	return dt;
    	
    }

    no se si quieres usar datatable u otro objeto, pero asi recuperas los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 14 de agosto de 2019 11:31
  • disculpa parece que no me exprese correctamente el problema es como hacer el store procedure ya que el actual es select * from phistorio y es una sola tabla pero ahora tengo que condicionar y ademas enviare esos datos a otro form no como en el formulario actual que todo se queda en el mismo form
    miércoles, 14 de agosto de 2019 23:49
  • hola

    >>el problema es como hacer el store procedure ya que el actual es select * from phistorio y es una sola tabla

    de donde salio el codigo que nos muestras del metodo CN_EliminarLibro ?

    porque veo que ese es un procedure y define un parametros

    si sabes hacer ese entonces sabes como hacer un SELECT con un WHERE, es exactamente igual solo cambias el DELETE por el SELECT

    a donde apunto es que ya saber como hacer lo que estas preguntando

    >>ademas enviare esos datos a otro form no como en el formulario actual que todo se queda en el mismo form

    porque vas hacer eso ? no envies los datos al otros form, solo envia el id o codigo de la entidad, la accion de recuperar los datos la haces en el otro form

    ademas podrias programar algo mas orientado a capas asi no tienes el codigo en el form sino que reutilizas el acceso a datos

    [WinForms] Edición Empleados

    como lo explico en el articulo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 15 de agosto de 2019 0:21
  • Hola Julio Angel Mejía:

    Puedes hacer dos procedures, e invocarlos en el form donde vas a presentarle los datos. 

    De el primer form, pasas el id del libro al segundo form.

    En este al cargar, llamas al procedure que recupera los datos del libro, y cargas estos en los textBox.

    Después llamas al procedure que recupera el histórico de prestamos, y lo cargas en el datagrid.

    create procedure SP_GetLibro 
    (
        @ID INT
    )
    AS
    BEGIN
    
        SELECT * FROM DATOSLIBRO
    END
    GO
    create procedure SP_GetPrestamos_Libro
    (
        @IDLIBRO INT
    )
    AS
    BEGIN
    
        SELECT * FROM PRESTAMOS 
        WHERE IDLIBRO = @IDLIBRO
    
    END
    GO

    jueves, 15 de agosto de 2019 16:43