Usuario
como mostrar una consulta de seleccion por parametros en un datagridview

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
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 -
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:
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.
- Editado Gabriel Castro RModerator jueves, 29 de octubre de 2020 2:44