none
Llenar DataGrid con consulta de SQL Server RRS feed

  • Pregunta

  • Estimados, por favor su ayuda ya que al momento tengo un DataGrid el cual lo cargo desde un archivo txt pero solo el campo "Nombre" del DataGrid necesito cargarlo con una consulta a BDD SQL. Al momento tengo una tabla llamada "PERSONA" que tiene varios campos pero los que necesito son CODIGO, NOMBRES, APELLIDOS y no se como comparar el campo "codigoEmp" del DataGrid con el campo CODIGO de la tabla para que agregue el Nombre y Apellido concatenados al campo "Nombre" del DataGrid.

    Adjunto el código que tengo al momento:

    Try
                Using cnn As New SqlConnection("Server=xxxx;Database=xxxx;User ID=xxxx; Password=xxxx")
                    Dim cmd As SqlCommand = cnn.CreateCommand()
                    cnn.Open()
                    
                    If (txt_Ruta.Text <> String.Empty) Then
                        Dim leer As New StreamReader(txt_Ruta.Text)
                        
                        While Not leer.EndOfStream()
                            Dim texto As String
                            texto = leer.ReadLine()
                            Dim codigoEmp As String = texto.Substring(0, 5).ToString()
                            Dim fechaAnio As String = texto.Substring(5, 4).ToString()
                            Dim fechaMes As String = texto.Substring(9, 2).ToString()
                            Dim fechaDia As String = texto.Substring(11, 2).ToString()
                            Dim hora As String = texto.Substring(13, 2).ToString() + ":" + texto.Substring(15, 2).ToString()
                            Dim fecha As String = fechaDia + "/" + fechaMes + "/" + fechaAnio
                            Dim desayunoD As String = dtp_DesayunoD.Text
                            Dim desayunoH As String = dtp_DesayunoH.Text
                            Dim almuerzoD As String = dtp_AlmuerzoD.Text
                            Dim almuerzoH As String = dtp_AlmuerzoH.Text
                            Dim meriendaD As String = dtp_MeriendaD.Text
                            Dim meriendaH As String = dtp_MeriendaH.Text
                            Dim tipoAlimento As String = "No asignado"
                            Dim valor As String = "No asignado"
                            If (hora >= desayunoD And hora <= desayunoH) Then
                                tipoAlimento = "Desayuno"
                                valor = txt_ValorD.Text
                            End If
                            If (hora >= almuerzoD And hora <= almuerzoH) Then
                                tipoAlimento = "Almuerzo"
                                valor = txt_ValorA.Text
                            End If
                            If (hora >= meriendaD And hora <= meriendaH) Then
                                tipoAlimento = "Merienda"
                                valor = txt_ValorM.Text
                            End If
                            If (codigoEmp < 999) Then
                                If Not dgw_TablaValores.Rows.Cast(Of DataGridViewRow)() _
                           .Any(Function(r) r.Cells(1).Value = codigoEmp AndAlso r.Cells(5).Value = tipoAlimento) Then
                                    'inserto los valor en el Grid
                                    dgw_TablaValores.Rows.Add(1, codigoEmp, "Nombres", fecha, hora, tipoAlimento, valor)
                                End If
                            Else
                                dgw_TablaValores.Rows.Add(1, codigoEmp, "Nombres", fecha, hora, tipoAlimento, valor)
                            End If
    
                        End While
                    Else
                        MsgBox("Seleccione el archivo a cargar", MsgBoxStyle.Exclamation, "Archivo no seleccionado")
                    End If
                End Using
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try


    Saludos...

    martes, 8 de marzo de 2016 14:39

Respuestas

  • Hola:
    En un Form con 1 DataGridView y 1 Button, copia y pega el siguiente codigo

    Option Explicit On
    Option Strict On
    Imports System.Data.OleDb
    Imports System.Data.SqlClient

    Public Class Form1
        Dim moDataTable As New DataTable("PRUEBA")
        Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.DataGridView1.AllowUserToAddRows = False
            'Cargar el fichero texto en el datagrid
            Dim lsCadConexionTxt As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & ";Extended Properties='TEXT;HDR=Yes'"
            Try
                Using loConexionTxt As New OleDbConnection(lsCadConexionTxt)
                    ' Construimos la consulta SQL de selección, donde especificaremos el nombre del archivo de texto.
                    Dim lsQuery As String = "Select * From PRUEBA#txt"
                    ' Construimos un comando para ejecutar la consulta.
                    Using loComando As New OleDbCommand(lsQuery, loConexionTxt)
                        ' Construimos un objeto DataAdapter
                        Dim loDataAdapter As New OleDbDataAdapter(loComando)
                        'para que se vea el tamaño de las columnas
                        loDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
                        ' Rellenamos un objeto DataTable
                        loDataAdapter.Fill(moDataTable)
                    End Using
                End Using
                'Añadir columna NOMBREAPELLIDO al DataTable
                moDataTable.Columns.Add("NOMBREAPELLIDO", Type.GetType("System.String"))
                Me.DataGridView1.DataSource = moDataTable
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            'Lee todas las filas del datatable, busca el codigo y carga la columna NOMBREAPELLIDO
            Dim lsNomApe As String
            For Each loFila As DataRow In moDataTable.Rows
                lsNomApe = lF_sNombreApellido(loFila.Item("ID").ToString)
                loFila.Item("NOMBREAPELLIDO") = lsNomApe
            Next
        End Sub

        Private Function lF_sNombreApellido(ByVal vsId As String) As String
            Dim loResultado As Object = Nothing
            Try
                Dim lsQuery As String = "Select FirstName + ' ' + LastName As NOMBREAPELLIDO From Employees Where EmployeeID=@Id"
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New SqlParameter("@Id", vsId))
                        loConexion.Open()
                        loResultado = loComando.ExecuteScalar()
                        If IsNothing(loResultado) = True Then
                            Return "INEXISTENTE"
                        Else
                            Return CStr(loResultado)
                        End If
                    End Using
                End Using
            Catch Exp As Exception
                MessageBox.Show(Exp.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return "INEXISTENTE"
        End Function

    End Class

    El Fichero con datos llamado PRUEBA.TXT contiene los siguientes datos:

    ID,CIUDAD
    1,MADRID
    2,VALENCIA
    3,BALEARES
    48,BIZKAIA

    El resultado es el siguiente


    Un saludo desde Bilbo
    Carlos


    miércoles, 9 de marzo de 2016 10:15