none
¿conviene usar un dataset oh un datatable en este caso? RRS feed

  • Pregunta

  • Muy buenos dias/tardes/noches!

    Estoy utilizando Microsoft Visual Studio 2012 y Microsoft SQL Server.

    Mi consulta es la siguiente:

    Tengo un dilema al cargar unos textbox con varios datos, los cuales tomo de una BD que obtengo realizando una consulta y los cargo en un dataset, la consulta incluye un INNER JOIN ya que necesito datos de dos tablas, al cargar los valores de la primer tabla se muestran mas que bien pero al cargar los valores de la segunda tabla utilizada en el INNER JOIN en los textbox me devuelve el valor de 0.

    Basicamente este es mi codigo:

        Private Sub cargafichapers()
            Dim dt As New DataTable
            Dim cmd As New SqlCommand
            Dim da As New SqlDataAdapter
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "SELECT * FROM Alumno INNER JOIN Garante ON Alumno.Cod_Garante = Garante.Cod_Garante WHERE Alumno.Num_Legajo = " & txtnumlegajo.Text & ""
            cmd.Connection = cnn
            da.SelectCommand = cmd
            da.Fill(dt)
            TxtApellido.Text = dt.Rows(0).Item(1)
            TxtNombre.Text = dt.Rows(0).Item(2)
            TxtDomicilio.Text = dt.Rows(0).Item(3)
            TxtTelefono.Text = dt.Rows(0).Item(4)
            TxtLugarNacim.Text = dt.Rows(0).Item(5)
            TxtLocalidad.Text = dt.Rows(0).Item(6)
            CboEstCivil.Text = dt.Rows(0).Item(7)
            TxtDni.Text = dt.Rows(0).Item(8)
            TxtCorreo.Text = dt.Rows(0).Item(9)
            *a partir de aqui me da los valores incorrectos*
            TxtNombGarante.Text = dt.Rows(0).Item(13)
            TxtApellGarante.Text = dt.Rows(0).Item(14)
            TxtParentesco.Text = dt.Rows(0).Item(15)
            TxtActLaboral.Text = dt.Rows(0).Item(16)
            txtcargo.Text = dt.Rows(0).Item(17)
            TxtDomicGarante.Text = dt.Rows(0).Item(18)
            TxtIngresMenus.Text = dt.Rows(0).Item(19)

    De tener que cargarlo en un dataset agradeceria que me expliquen como funciona y como lo tendria que hacer, muchisimas gracias desde ya.

    martes, 12 de julio de 2016 22:18

Respuestas

  • ctrlcctrlv,

    Te recomiendo que en tanto te sea posible no hagas uso de DataSet, puedes hacer uso de un objeto de tipo DataReader que es mucho más óptimo para estos casos, otra recomendación es que no concatenes valores como parámetros a la consulta y en la lista de selección especifica las columnas, olvida el uso del comodín "*"

    Dim ConsultaSQL As String = "SELECT Campo1, Campo2, <...> FROM Alumno INNER JOIN Garante ON Alumno.Cod_Garante = Garante.Cod_Garante WHERE Alumno.Num_Legajo = @Num_Legajo"
    
    Dim cmd As New SqlCommand(ConsultaSQL, cnn)
    
    cmd.Parameters.AddWithValue("@Num_Legajo", txtnumlegajo.Text)
    
    cnn.Open()
    
    Dim dr As SqlDataReader = cmd.ExecuteReader()
    
    If dr.Read()
    	TxtApellido.Text = dr.GetString(0)
    	TxtNombre.Text = dr.GetString(1)
    	'Todos los demás
    End If

    Espero que la información proporcionada te haya sido de utilidad.


    • Marcado como respuesta ctrlcctrlv martes, 12 de julio de 2016 23:30
    martes, 12 de julio de 2016 22:31

Todas las respuestas

  • ctrlcctrlv,

    Te recomiendo que en tanto te sea posible no hagas uso de DataSet, puedes hacer uso de un objeto de tipo DataReader que es mucho más óptimo para estos casos, otra recomendación es que no concatenes valores como parámetros a la consulta y en la lista de selección especifica las columnas, olvida el uso del comodín "*"

    Dim ConsultaSQL As String = "SELECT Campo1, Campo2, <...> FROM Alumno INNER JOIN Garante ON Alumno.Cod_Garante = Garante.Cod_Garante WHERE Alumno.Num_Legajo = @Num_Legajo"
    
    Dim cmd As New SqlCommand(ConsultaSQL, cnn)
    
    cmd.Parameters.AddWithValue("@Num_Legajo", txtnumlegajo.Text)
    
    cnn.Open()
    
    Dim dr As SqlDataReader = cmd.ExecuteReader()
    
    If dr.Read()
    	TxtApellido.Text = dr.GetString(0)
    	TxtNombre.Text = dr.GetString(1)
    	'Todos los demás
    End If

    Espero que la información proporcionada te haya sido de utilidad.


    • Marcado como respuesta ctrlcctrlv martes, 12 de julio de 2016 23:30
    martes, 12 de julio de 2016 22:31
  • Amigo ctrlcctrlv

    para tu cometido, no es necesario que pases a un datatable, menos a un dataset. desde mi punto de vista solo debes utilizar un sqlDataReader y recorrerlo.

    Dim reader As SqlDataReader = cmd.ExecuteReader()
    
            If reader.HasRows Then
                Do While reader.Read()
                    'Aqui cargas tus textBox
                     
                Loop
            Else
                //No hay datos
            End If
    
    reader.Close()

    Aquí tienes más info:

    Reader

    Espero te sirva, saludos

     

    Javier

    martes, 12 de julio de 2016 22:40
  • Como siempre! más que agradecido Willams!
    martes, 12 de julio de 2016 23:31