Usuario
Ayuda con store procedure y selección de datos

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
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- Propuesto como respuesta Pablo RubioModerator miércoles, 14 de agosto de 2019 14:50
-
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
-
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
como lo explico en el articulo
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
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
- Marcado como respuesta Julio Angel Mejia sábado, 17 de agosto de 2019 22:21