Récupérer le résultat d'un SELECT (VB.net)

Résolu/Fermé
Truc - 22 juil. 2009 à 18:25
 SAIH - 15 juin 2012 à 20:41
Bonjour,

je travaille avec une base de données SQL Server, je fait une simple requête sur ma table et elle me renvoie un seul résultat.

Mon problème c'est que je ne sais pas comment récupérer ce résultat que je souhaite afficher dans un TextBox.

Pouvez-vous m'aider SVP?

Merci d'avance.

15 réponses

byLPG Messages postés 17 Date d'inscription dimanche 23 août 2009 Statut Membre Dernière intervention 26 août 2009 50
24 août 2009 à 12:37
je croyais que tu developpais dans ASP.NET.... c'est pour ça que je t'ai parlé d'url.... autant pour moi :

donc tu es dans VB.NET : pour mettre une variable dans la requete SQL attachée a ton datasource, il faut mettre un @ devant le nom du champs : select toto,titi,tata from machin where nom = @mavariable

automatiquement VS va reconnaitre la variable et il va te demander a quoi elle doit être egale :

tu vas lui dire que c'est un controle, par exemple textbox1, et que la propriété qui t'interesse est ".text"

a chaque actualisation il remplacera @mavariable par le contenu de textbox1.

ça devrait resoudre ton probléme....

ton probléme de schema c'est que tu créés un controle a partir d'une certaine requete, et qu'ensuite tu changes celle-ci sans modifier le controle. avec l'astuce du @mavariable tu n'aura plus ce soucis car le schema de la requete ne changera pas.

LPG
14
byLPG Messages postés 17 Date d'inscription dimanche 23 août 2009 Statut Membre Dernière intervention 26 août 2009 50
24 août 2009 à 08:16
tu peux mettre un controle gridview dans la même page et le rendre visible ou invisible quand c'est le moment. ça va te faire une table tres jolie, synamique, triable etc... (a configurer dans l'interface graphique comme d'hab).

Mais bon si tu veux vraiment passer a une autre page, emporte avec toi le paramétre issue du textbox :
le plus simple c'est de le mettre dans l'URL de la page destination, et tu le recupere ensuite apres ouverture de la page :

- dans ta page de départ :
page.redirect ("~/toto.aspx & "?nom=" & textbox1.text )
(le "?" sert a indiquer un parametre dans une URL : il est suivi du nom de la variable = valeur)

ensuite à l'arrivée, dans ta page toto.aspx tu peux récuperer ce parametre :

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


et derriere tu fais ta requete et tu alimentes un gridview ou un datagrid ou n'importe quel control data.
(c'est quand même plus simple que de fabriquer une table de A a Z).

tient moi au courant...

LPG
10
byLPG Messages postés 17 Date d'inscription dimanche 23 août 2009 Statut Membre Dernière intervention 26 août 2009 50
24 août 2009 à 18:08
bon, on va faire ultra simple :

au lieu de se faire chier avec les dataset, datadapter, sqlsources et autres databindings de VS, on va tout faire à la main :

tu mets sur ta form un combo box et un datagrid, c'est tout !

et dans le code tu mets ça : (tu changeras evidemment les requetes, les noms de serveur, de BD etc...)

dans cette exemple je requete une table "magasins" par rapport au champs "nom" sur la base "commandes" du serveur 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


'remplissage de la combobox

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

sqlSelect = "SELECT [mag_nom] FROM magasins"
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

'selection dans la combo

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

sqlSelect = "SELECT * FROM magasins where mag_nom='" & 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

tu peux adapter tout ça a tes propres controles.

amuses toi bien !

lpg
9
progfann Messages postés 365 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 23 septembre 2010 23
22 juil. 2009 à 20:53
cnx.open()
com=new sqlcommand("select...",cnx)
TextBox1.Text = com.ExecuteScalar()
cnx.close()
5
thank you very much
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lorie-triger Messages postés 62 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 29 janvier 2011 22
24 août 2009 à 13:26
merci bien LPG :)
mais aprat ca !
j'ai toujours des problems dans la modification de la requete de base dans les datagrid view
j'ai lu qu'il y a des etapes a suisvre afin de modifier cette requete
je dois creer un tableadapter et puis dataset et plein de chose que je comprends pas :s
je sais meme pas les etapes !
et ca je l'ai trouvee sur un cours ado.net d'une ancienne verstion vb
alors que moi je suis sur visual studio 2005 !
alors vous dites quoi apropos de ca !?
5
byLPG Messages postés 17 Date d'inscription dimanche 23 août 2009 Statut Membre Dernière intervention 26 août 2009 50
24 août 2009 à 14:32
oui c'est vrai que c'est un peu merdique tout ces datamachins :

je suis habitué au dotnet et c'est bien plus simple qu'en Windows Form

je vais essayer de faire ton truc et je te redis.
4
lorie-triger Messages postés 62 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 29 janvier 2011 22
26 août 2009 à 12:06
bonjour
merci bien LPG
tu m'as beaucoup aidée !!
voila le code maintenant ca marche bien !


Public Class Form1
Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
ChargerDonnees()
End Sub

Private Sub ChargerDonnees()
        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


PS : merci a toi aussi tomlev :)
4
Merci beaucoup
3
lorie-triger Messages postés 62 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 29 janvier 2011 22
23 août 2009 à 01:43
et si on veut mettre les resultats dans un tableau !!
comment faire ?!
par exemple dans un 1er form on insere le nom puis on clique sur le bouton et on affiche toutes les donnees existante dans une table "personne" et qui conserne cette personne qu'on vient de taper le nom !!
je veux juste les etapes et ce que je dois utiliser :)
merci bien !
3
byLPG Messages postés 17 Date d'inscription dimanche 23 août 2009 Statut Membre Dernière intervention 26 août 2009 50
23 août 2009 à 17:39
et bin c'est pas compliqué millard de diou !

sur ta form tu met un text box "textbox1" et un bouton quelconque.
tu ajoutes autant de textbox que tu as de champs dans ta table (textbox2,3 etc...)

tu doubles clic sur le bouton et tu arrives dans le code. là tu mets

(je pars du principe que tu as déclaré tout le binz avant, et mis les imports necessaires)

connsql.open()
sqlselect = select nom, prenom, age, taille, couleur, genre, QI from matable where nom='" & textbox1.text & '"
Dim CommandSQL As New 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

et pis c'est tout !

nb: tu enroberas tout ça dans de la barbe a papa histoire de faire joli (des labels devant les textbox et tout le cinéma).


bon courage !

LPG
3
lorie-triger Messages postés 62 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 29 janvier 2011 22
23 août 2009 à 23:05
merci bien LPG
mais c'est pas ca ce que je chereche !
en fait je veux que les resultats s'affichent dans un tableau !
je m'explique
en premier lieu tu inseres le nom dans un textbox tu clique sur le bouton
tu passes a un autre form la ou il y a les resultats du select concernant ce nom deja tapé sur un form1
vous voyez !
et en plus je veux que ces resultas s'affichent en tableau non pas en textbox !

alors ce que je dois faire c'est faire la requete dans le code du bouton du 1er form
puis la garder quelque par ! :S"la ou je me bloque"
puis afficher ca en tableau ! ca m'echape aussi :(
3
lorie-triger Messages postés 62 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 29 janvier 2011 22
24 août 2009 à 11:55
bonjour
merci bien LPG ^^'
bon je vous dis quesque j'ai fait :
j'ai pu garder la valeur de la variable du form1 pour la reaficher dans form2 dans un textbox !
il suffit de faire
Me.TextBox1.Text = Form1.TextBox1.Text

alors maintenat j'ai la variable que je vais utiliser dans la requete select du datagrig view !
ici vient le probleme a nouveau !
quand je cree un datagrid view j'arrive pas a changer la requete de base !
je m'explique :
je clique sur le triangle de datagrid view
puis je fais choisir la source de donnees
je passe les etapes jusqu'a avoir la table que je veux et puis cette table s'affiche toute entiere
je clique encore pour faire ajouter une requete
et je l'ajoute je l'execute
mais une fois je fais ok pour voir le resultat dans cette dataview grid !
il me donne "le shema retourné pqr la nouvelle requete est different de celui de la requete de base "
et la je bloque a nouveau !!
et j'avais toujours ce problems de gestion des datagrid view !
soit je fais le select de la table entiere et la ca marche
si je veux modifier la requete je passe toujours par des view que je cree dans mon sqlsever et je les recupere dans le datagrid view
mais la je peux pas l'utiliser car la variable est a saisir dans le form lui meme !
3
lorie-triger Messages postés 62 Date d'inscription mercredi 20 août 2008 Statut Membre Dernière intervention 29 janvier 2011 22
25 août 2009 à 23:30
salut !
et me voila encore une fois !!
je suis vaiment malheureuse ..j'ai passé 2 jours et ca marche plus :(

voila mon code :

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)  //  ici il bloque lors du debogage il me dit : la valeur ne peut pas etre null 

        DataGridView1.ColumnHeadersVisible = True  // ici il n'y a plus autogeneratecolumns
        DataGridView1.DataSource = mook
        DataGridView1.Refresh()
        connection.Close()


    End Sub


ce visual studio 2005 n'a pas accepté beaucoups de mots de votre code je sais pas ..il est nouveau peut etre !!
bon j'ai fait de mon mieux afin de pouvoir genrer ca a la main !
mais ca marche pas !
et aussi la requete il n'accepte plus la condition avec telle ecriture !:(
  Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia where testoo='" & textBox1.SelectedItem & "' ", connection)
3
byLPG Messages postés 17 Date d'inscription dimanche 23 août 2009 Statut Membre Dernière intervention 26 août 2009 50
26 août 2009 à 08:14
bonjour Lorie, t'inquitée pas on a tous les même problémes au début.

j'avais fait ce code sous VS2008 c'est pour ça que tu trouves quelques differences.


quand tu remplis le datatable a partir du sqladapter ( hana.Fill(mook) ) il trouve dans ta table des champ avec la valeur NULL et ça y sait pas quoi en faire. pour contourner ce probléme, au lieu de prendre tout les champs sans rien controler, on va mettre une requete plus "intelligente" :


a la place de "SELECT * FROM assia " tu vas mettre :

"SELECT isnull(champ1, '0') , isnull(champ2,'0') ,isnull(champ3,'0') etc... FROM assia"

ou champ1, champ2 etc... sont les champs de ta table (ceux que tu veux afficher dans le datagrid).

le isnull( champs1, '0') veut dire : renvoi moi la valeur de champ1, et si elle est null tu met '0' a la place !

en general on met '0' ou 0 sans quote pour les champs numeriques et 'Neant' ou 'vide' pour les champs texte.


ensuite ton erreur sur le
Dim command As New System.Data.SqlClient.SqlCommand("SELECT * FROM assia where testoo='" & textBox1.SelectedItem & "' ", connection)

ça vient du selecteditem : il faut préciser selecteditem.text...

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


quand à l'autogeneratecolumns, je suppose qu'il n'existe pas en 2005 (asp2) , mais en VS2008 (asp3.5)
tu me diras si ça te pose un probléme (il ne devait pas servir a grand chose).

bonne journée !
1
Le résultat ne peut pas être négative, tu peux passer toutes tes informations dans un fichier excel comme ça les diables ne peuvent pas t'emerder la vie :D
1