none
error lógico - busqueda con Join en sql express, el registro no existe. RRS feed

  • Pregunta

  • Private Sub btnBuscarLibro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscarLibro.Click
            If txtLibro.Text.Length = 0 Then
                MessageBox.Show("Rellena todos los campos")
            Else

                Dim query As String = "select * from libro, ejemplar where libro.libroNombre = @libro and libro.idLibro=ejemplar.libro_idLibro"
                Dim cmd As New SqlCommand(query, cnn)
                cmd.Parameters.AddWithValue("@libro", txtLibro.Text)

                Dim DAP As New SqlDataAdapter(cmd)
                Dim dt As New DataTable
                Dim dt2 As New DataTable
                DAP.Fill(dt)
                DAP.Fill(dt2)

                If dt.Rows.Count <> 0 Then
                    Dim campo As DataRow = dt.Rows(0)
                    Dim campo1 As DataRow = dt2.Rows(0)

                    txtIDLibro.Text = CStr(campo(0))
                    txtIDEjemplar.Text = CStr(campo1(0))

                Else
                    MessageBox.Show("El registro no existe")
                End If
            End If
        End Sub

    ese es el código y el problema es el planteado en el enunciado, probablemente se deba a mi conocimiento casi nulo en la utilización de parámetros, pero creo que no realiza la consulta que deseo, espero me puedan ayudar, supongo que es un error o en la consulta o en los DAP declarados, saludos.

    martes, 23 de octubre de 2012 23:32

Respuestas

  • La consulta que has escrito es un INNER join. Esto significa que no devolverá ningún registro, aunque el libroNombre exista, en el caso de que en la tabla "ejemplar" no exista un registro con el mismo ID.

    Y en cualquier caso, la forma en la que lees los resultados no es la correcta. Estás cargando dos datatables con LOS MISMOS datos y no, como aparentemente parece que tratas de hacer, cada uno con los datos de una de las dos tablas.

    Si quieres traer los datos de cada tabla a dos datatables distintos, tendrás que escribir dos sentencias select y configurar cada una en uno de los dos dataadapters.

    Y si quieres leer de golpe los datos de las dos tablas devolviendo un mismo registro con las columnas de las dos tablas, entonces está bien que hagas un JOIN de las mismas, pero recogerás el resultado con un solo dataadapter hacia un único datatable. Y si puede darse el caso de que en la primera tabla exista el registro pero en la segunda no, entonces te conviene usar un LEFT JOIN porque sino no te devuelve ningún dato:

    "select * from libro left join ejemplar on libro.idLibro=ejemplar.libro_idLibro where libro.libroNombre = @libro"

    • Marcado como respuesta CloudSaurio sábado, 27 de octubre de 2012 3:00
    miércoles, 24 de octubre de 2012 18:38