Recuperar el resultado de un SELECT (VB.net)
Resuelto
Truc
-
SAIH -
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.
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
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
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
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
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
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
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
¡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!?
¡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!?
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é.
estoy acostumbrado a dotnet y es mucho más simple que en Windows Form
intentaré hacer lo que me dices y te diré.
Hola
¡muchas gracias LPG!
¡me has ayudado mucho!
aquí está el código, ¡ahora funciona bien!
PD: ¡gracias a ti también tomlev! :)
¡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! :)
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!
¿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!
¡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
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
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! :(
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! :(
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
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.
¡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.
¡Hola!
¡y aquí estoy otra vez!
realmente estoy muy triste... he pasado 2 días y ya no funciona :(
aquí está mi código:
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!:(
¡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)
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!
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!