Recuperar el resultado de un SELECT (VB.net)

Resuelto
Truc -  
 SAIH -
Hola,

estoy trabajando con una base de datos SQL Server, hago una consulta simple en mi tabla y me devuelve un solo resultado.

Mi problema es que no sé cómo recuperar ese resultado que quiero mostrar en un TextBox.

¿Puede ayudarme, por favor?

Gracias de antemano.
Configuración: Windows Vista Firefox 3.0.12

15 respuestas

  1. byLPG Mensajes publicados 17 Estado Miembro 50
     
    Creía que estabas desarrollando en ASP.NET... por eso te hablé de URL... mis disculpas:

    entonces estás en VB.NET: para poner una variable en la consulta SQL adjunta a tu datasource, debes poner un @ delante del nombre del campo: select toto,titi,tata from machin where nom = @mavariable

    automáticamente VS reconocerá la variable y te preguntará a qué debe ser igual:

    le dirás que es un control, por ejemplo textbox1, y que la propiedad que te interesa es ".text"

    con cada actualización reemplazará @mavariable por el contenido de textbox1.

    eso debería resolver tu problema....

    tu problema de esquema es que creas un control a partir de una cierta consulta, y luego cambias esta sin modificar el control. con el truco del @mavariable ya no tendrás este problema porque el esquema de la consulta no cambiará.

    LPG
    14
  2. byLPG Mensajes publicados 17 Estado Miembro 50
     
    Puedes poner un control GridView en la misma página y hacerlo visible o invisible cuando sea necesario. Esto te permitirá tener una tabla muy bonita, dinámica, clasificable, etc. (a configurar en la interfaz gráfica como de costumbre).

    Pero bueno, si realmente quieres pasar a otra página, lleva contigo el parámetro del textbox:
    lo más sencillo es incluirlo en la URL de la página de destino, y lo recuperas después de abrir la página:

    - en tu página de inicio:
    Response.Redirect("~/toto.aspx?nom=" & TextBox1.Text)
    (el "?" indica un parámetro en una URL: va seguido del nombre de la variable = valor)

    Después, al llegar, en tu página toto.aspx puedes recuperar este parámetro:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim MyNom
    MyNom = Request.QueryString("nom")
    etc...

    Y luego haces tu consulta y alimentas un GridView o un DataGrid o cualquier control de datos.
    (es mucho más fácil que crear una tabla de la A a la Z).

    Manténme informado...

    LPG
    10
  3. byLPG Mensajes publicados 17 Estado Miembro 50
     
    Bueno, vamos a hacerlo muy simple:

    en lugar de complicarse con los dataset, datadapter, sqlsources y otros databindings de VS, haremos todo a mano:

    solo debes poner en tu formulario un combo box y un datagrid, ¡eso es todo!

    y en el código pones esto: (obviamente cambiarás las consultas, los nombres de servidor, de BD, etc...)

    en este ejemplo, consulto una tabla "tiendas" respecto al campo "nombre" en la base "pedidos" del servidor VLPG01\SQLexpress.

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Public Class Form1
    Public i As Integer
    Public sqlSelect As String
    Public ConnSQL As New SqlConnection()
    Public ReadSQL As SqlDataReader
    Dim ev As System.EventArgs
    Dim susername As String

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    'llenar el combobox

    ConnSQL.ConnectionString = "Data Source=vlpg01\sqlexpress;Initial Catalog=pedidos;Integrated Security=SSPI"
    ConnSQL.Open()

    sqlSelect = "SELECT [ti_nombre] FROM tiendas"
    Dim CommandSQL As New SqlCommand(sqlSelect, ConnSQL)
    ReadSQL = CommandSQL.ExecuteReader()
    Do While ReadSQL.Read()
    ComboBox1.Items.Add(ReadSQL.GetValue(0))
    Loop

    ReadSQL.Close()
    ConnSQL.Close()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    'selección en el combo

    ConnSQL.ConnectionString = "Data Source=vlpg01\sqlexpress;Initial Catalog=pedidos;Integrated Security=SSPI"
    ConnSQL.Open()

    sqlSelect = "SELECT * FROM tiendas where ti_nombre='" & ComboBox1.SelectedItem & "'"
    Dim dt As New DataTable

    Dim oSqlDataAdapter As New SqlDataAdapter(sqlSelect, ConnSQL)
    oSqlDataAdapter.Fill(dt)

    DataGridView1.AutoGenerateColumns = True
    DataGridView1.DataSource = dt
    DataGridView1.Refresh()
    ReadSQL.Close()
    ConnSQL.Close()

    End Sub

    End Class

    puedes adaptar todo esto a tus propios controles.

    ¡diviértete!

    lpg
    10
  4. progfann Mensajes publicados 365 Fecha de registro   Estado Miembro Última intervención   23
     
    cnx.open() com=new sqlcommand("select...",cnx) TextBox1.Text = com.ExecuteScalar() cnx.close()
    5
    1. SAIH
       
      Merci beaucoup.
      0
  5. lorie-triger Mensajes publicados 72 Estado Miembro 22
     
    ¡Muchas gracias LPG :)
    ¡Pero aparte de eso!
    ¡Sigo teniendo problemas para modificar la consulta base en los datagrid view!
    He leído que hay pasos a seguir para modificar esta consulta
    Tengo que crear un tableadapter y luego un dataset y un montón de cosas que no entiendo :s
    ¡Ni siquiera sé los pasos!
    Y eso lo encontré en un curso de ado.net de una versión antigua de vb
    ¡Mientras que yo estoy en visual studio 2005!
    ¿Entonces qué dices acerca de eso!?
    5
  6. byLPG Mensajes publicados 17 Estado Miembro 50
     
    Sí, es verdad que todo este asunto de los datos es un poco complicado:

    estoy acostumbrado a dotnet y es mucho más simple que en Windows Form

    intentaré hacer lo que me dices y te diré.
    4
  7. lorie-triger Mensajes publicados 72 Estado Miembro 22
     
    Hola
    ¡muchas gracias LPG!
    ¡me has ayudado mucho!
    aquí está el código, ¡ahora funciona bien!

     Public Class Form1 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click CargarDatos() End Sub Private Sub CargarDatos() Dim connectString As String = "Server=ALI\SQLEXPRESS;Database=TWO;Trusted_Connection=True;" Dim connection As New System.Data.SqlClient.SqlConnection(connectString) Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia where testoo='" & TextBox1.Text & "'", connection) Dim dt As New DataTable Dim adpt As New Data.SqlClient.SqlDataAdapter(command) Try connection.Open() adpt.Fill(dt) DataGridView1.DataSource = dt Finally connection.Close() End Try End Sub End Class 


    PD: ¡gracias a ti también tomlev! :)
    4
  8. lorie-triger Mensajes publicados 72 Estado Miembro 22
     
    et si queremos poner los resultados en una tabla !!
    ¿cómo hacerlo?!
    por ejemplo, en un primer formulario ingresamos el nombre y luego hacemos clic en el botón para mostrar todos los datos existentes en una tabla "persona" que concernen a esta persona cuyo nombre acabamos de escribir !!
    solo quiero los pasos y lo que debo usar :)
    ¡gracias!
    3
  9. byLPG Mensajes publicados 17 Estado Miembro 50
     
    ¡Pues no es complicado, mil diablos!

    En tu formulario, pones un textbox "textbox1" y un botón cualquiera.
    Agregas tantos textbox como campos tengas en tu tabla (textbox2, 3, etc...)

    Haces doble clic en el botón y llegas al código. Ahí pones

    (parto del principio de que has declarado todo antes y puesto los imports necesarios)

    connsql.open()
    sqlselect = select nombre, apellido, edad, altura, color, género, CI from matabla where nombre='" & textbox1.text & '"
    Dim CommandSQL Como Nuevo SqlCommand(sqlSelect, ConnSQL)
    ReadSQL = CommandSQL.ExecuteReader()
    ReadSQL.Read()

    textbox2.text = ReadSQL.GetValue(0)
    textbox3.text= ReadSQL.GetValue(1)
    textbox4.text = ReadSQL.GetValue(2)
    ... etc....

    readsql.close
    connsql.close
    connsql.dispose

    ¡y eso es todo!

    Nota: envolverás todo eso en algodón de azúcar para hacerlo bonito (con etiquetas delante de los textbox y todo el espectáculo).

    ¡Buena suerte!

    LPG
    3
  10. lorie-triger Mensajes publicados 72 Estado Miembro 22
     
    Merci bien LPG
    pero no es eso lo que estoy buscando.
    De hecho, quiero que los resultados se muestren en una tabla.
    Me explico.
    En primer lugar, ingresas el nombre en un cuadro de texto, haces clic en el botón
    y pasas a otro formulario donde están los resultados de la selección relacionada con el nombre ya ingresado en el formulario 1.
    ¿Ves?
    Además, quiero que esos resultados se muestren en una tabla y no en un cuadro de texto.

    Entonces, lo que debo hacer es realizar la consulta en el código del botón del primer formulario
    y luego mantenerla en algún lugar. :S "donde me bloquea".
    Luego, mostrar eso en una tabla. ¡Eso también me está escapando! :(
    3
  11. lorie-triger Mensajes publicados 72 Estado Miembro 22
     
    Hola
    ¡Muchas gracias LPG ^^'!
    Bueno, les cuento lo que hice:
    pude mantener el valor de la variable del form1 para volver a mostrarlo en el form2 en un textbox.
    Solo hay que hacer
    Me.TextBox1.Text = Form1.TextBox1.Text

    así que ahora tengo la variable que voy a utilizar en la consulta select del datagrid view.
    Aquí viene el problema de nuevo:
    cuando creo un datagrid view no puedo cambiar la consulta base.
    Me explico:
    hago clic en el triángulo del datagrid view
    luego elijo la fuente de datos
    paso por los pasos hasta tener la tabla que quiero y luego esta tabla se muestra en su totalidad.
    Vuelvo a hacer clic para agregar una consulta
    y la agrego, la ejecuto
    pero una vez que hago clic en ok para ver el resultado en este dataview grid,
    me dice "el esquema devuelto por la nueva consulta es diferente al de la consulta base".
    ¡Y aquí me bloqueo de nuevo!
    Siempre he tenido este problema con la gestión de los datagrid view.
    O hago el select de la tabla completa y eso funciona
    o si quiero modificar la consulta, siempre paso por vistas que creo en mi sqlserver y las recupero en el datagrid view.
    Pero aquí no puedo usarlo porque la variable tiene que ser ingresada en el propio form.
    3
  12. lorie-triger Mensajes publicados 72 Estado Miembro 22
     
    ¡Hola!
    ¡y aquí estoy otra vez!
    realmente estoy muy triste... he pasado 2 días y ya no funciona :(

    aquí está mi código:

    Public Class Form1 Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim connectString As String = "Server=ALI-582A65A96CB\SQLEXPRESS;Database=ONE;Trusted_Connection=True;" Dim connection As New System.Data.SqlClient.SqlConnection(connectString) connection.Open() Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia ", connection) Dim mook As DataTable Dim hana As New Data.SqlClient.SqlDataAdapter(command) Dim DataGridView1 As New DataGridView hana.Fill(mook) // aquí se bloquea durante la depuración me dice: el valor no puede ser nulo DataGridView1.ColumnHeadersVisible = True // aquí ya no hay autogeneratecolumns DataGridView1.DataSource = mook DataGridView1.Refresh() connection.Close() End Sub


    este Visual Studio 2005 no ha aceptado muchas palabras de su código, no sé... ¡es nuevo tal vez!
    bueno, hice lo mejor que pude para poder generar esto a mano. ¡pero no funciona!
    y también la consulta ya no acepta la condición con tal escritura!:(
     Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia where testoo='" & textBox1.SelectedItem & "' ", connection)
    3
  13. byLPG Mensajes publicados 17 Estado Miembro 50
     
    Hola Lorie, no te preocupes, todos tenemos los mismos problemas al principio.

    Hice este código en VS2008, por eso encuentras algunas diferencias.

    Cuando llenas el datatable a partir del sqladapter (hana.Fill(mook)), encuentra en tu tabla campos con valor NULL y no sabe qué hacer con ellos. Para sortear este problema, en lugar de tomar todos los campos sin controlar, vamos a poner una consulta más "inteligente":

    En lugar de "SELECT * FROM assia" vas a poner:

    "SELECT isnull(campo1, '0'), isnull(campo2, '0'), isnull(campo3, '0'), etc... FROM assia"

    donde campo1, campo2, etc... son los campos de tu tabla (los que deseas mostrar en el datagrid).

    el isnull(campo1, '0') significa: devuélveme el valor de campo1, y si es null pon '0' en su lugar.

    En general, se pone '0' o 0 sin comillas para los campos numéricos y 'Ninguno' o 'vacío' para los campos de texto.

    Luego, tu error en el
    Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia WHERE testoo='" & textBox1.SelectedItem & "'", connection)

    viene del selecteditem: hay que especificar selecteditem.text...

    Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia WHERE testoo='" & textBox1.SelectedItem.text & "'", connection)

    En cuanto a la autogeneración de columnas, supongo que no existe en 2005 (asp2), pero sí en VS2008 (asp3.5).
    Me dirás si te causa un problema (no debía servir de mucho).

    ¡Buen día!
    1
  14. Youneci
     
    El resultado no puede ser negativo, puedes pasar toda tu información a un archivo de Excel así los demonios no pueden molestarte la vida :D
    1