none
como mostrar una consulta de seleccion por parametros en un datagridview RRS feed

  • Pregunta

  • Hola tengo el siguiente inconveniente tengo que realizar una selección por parámetros donde los parámetros son las textbox y las uso como parámetros para mostrar los datos ingresados de las textboxs que luego se van a mostrar en un datagridview , el problema es que cuando quiero mostrar solamente me muestra la primer columna

     Dim sqlstr As String = "select ShipperID from shippers where ShipperID =@shipperID"
            Dim sqlstr2 As String = "select ShipperID,Phone from shippers where ShipperID =@shipperID or Phone = like @phone"
            Dim sqlstr3 As String = "select ShipperID,Phone,CompanyName from shippers 
            where ShipperID =@shipperID or Phone = like @phone or CompanyName= like @CompanyName"
            If Len(txtcod.Text) <> 0 Then
                multiselect(sqlstr, txtcod, txtphone, txtphone, DGView)
    
            ElseIf Len(txtcod.Text) <> 0 And Len(txtphone.Text) <> 0 Then
                multiselect(sqlstr2, txtcod, txtphone, txtphone, DGView)
    
            ElseIf Len(txtcod.Text) <> 0 And Len(txtphone.Text) <> 0 Or Len(txtcom.Text) <> 0 Then
                multiselect(sqlstr3, txtcod, txtphone, txtphone, DGView)
            End If
    
    
    
    
    Sub multiselect(ByVal sqlstr As String, ByVal codigo As TextBox, ByVal phone As TextBox, ByVal comp As TextBox, DGV As DataGridView)
            Dim cmd As New MySqlCommand(sqlstr, objConn)
            objConn.Open()
            cmd.Parameters.Add("@shipperid", MySqlDbType.Int32)
            cmd.Parameters.Add("@CompanyName", MySqlDbType.String)
            cmd.Parameters.Add("@Phone", MySqlDbType.String)
    
            cmd.Parameters.Item("@shipperid").Value = codigo.Text
            cmd.Parameters.Item("@CompanyName").Value = comp.Text
            cmd.Parameters.Item("@Phone").Value = phone.Text
    
            Dim myReader As MySqlDataReader
            myReader = cmd.ExecuteReader()
            Dim DT As New DataTable
            DT.Load(myReader)
            DGV.DataSource = DT
            objConn.Close()
            desconectar()
    End Sub 


    miércoles, 28 de octubre de 2020 13:04

Todas las respuestas

  • Hola:
    en un Form como el de la imagen


    Copia y pega el siguiente codigo

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

    Public Class Form3

        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.DataGridView1.AllowUserToAddRows = False
        End Sub

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim CadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Dim mListaParametros As New List(Of Parametro)
            Dim lParametro As Parametro
            Dim lsQuery As String = "SELECT * FROM Shippers WHERE ((@ShipperID IS NULL) OR (ShipperID Like Concat('%', @ShipperID, '%'))) AND ((@Phone IS NULL) OR (Phone Like Concat('%', @Phone, '%'))) AND ((@CompanyName Is NULL) OR (CompanyName Like Concat('%', @CompanyName, '%')))"
            lParametro = New Parametro("@ShipperID", txtCodigo.Text)
            mListaParametros.Add(lParametro)
            lParametro = New Parametro("@Phone", txtTelefono.Text)
            mListaParametros.Add(lParametro)
            lParametro = New Parametro("@CompanyName", txtNombre.Text)
            mListaParametros.Add(lParametro)
            Dim loDataTable As New DataTable
            Try
                Using loConexion As New SqlConnection(CadenaSQL)
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        'Añadir parametros al comando
                        For Each loParametro As Parametro In mListaParametros
                            loComando.Parameters.AddWithValue(loParametro.Nombre, IIf(IsNothing(loParametro.Valor), DirectCast(DBNull.Value, Object), loParametro.Valor))
                        Next
                        Using loDataAdapter As New SqlDataAdapter(loComando)
                            loDataAdapter.Fill(loDataTable)
                        End Using
                    End Using
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            DataGridView1.DataSource = loDataTable
        End Sub
    End Class

    Se hace uso de la clase Parametro cuyo codigo es

    Option Explicit On
    Option Strict On

    Public Class Parametro
        Public Property Nombre As String
        Public Property Valor As Object

        Public Sub New(ByVal strNombre As String, ByVal objValor As Object)
            Me.Nombre = strNombre
            Me.Valor = objValor
        End Sub
    End Class


    Un saludo desde Bilbo
    Carlos
    miércoles, 28 de octubre de 2020 20:40
  • Hola Conceptx,

    Para agregar a lo que ya te dijeron, acá te adjunto 4 tutoriales que me parece que podrían serte de utilidad en general:

    * tutorial1

    * tutorial2

    * tutorial3

    * tutorial4

    Les puedes poner subtítulos así:

    Si no es lo que buscabas, sería bueno que indiques a qué clase de query te refieres y cual base de datos si hay alguna. Espero que te sea de ayuda. Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice “Marcar como Respuesta”). Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    jueves, 29 de octubre de 2020 0:26
    Moderador