4 votes

Comment sélectionner sur la table de jonction en fonction de l'identification de l'étudiant ?

D'abord désolé mon anglais est mauvais.

J'ai un problème avec l'utilisation de la table de jonction qui ne me renvoie qu'un seul sujet, voici ma requête.

J'ai un Étudiant_tbl , Sujet_tbl , student_subject_tbl la table de jonction.

Voici ma requête, j'utilise vb.net.

SELECT subject_name 
FROM student_subject 
     JOIN student ON student.StudentID = student_subject.student_id 
     JOIN subject_bsit ON subject_bsit.subject_id = student_subject.sub_id 
WHERE student.StudentID='" & TextBox1.Text & "'"

Ce que je veux faire c'est que je veux juste sélectionner tout nom du sujet qui appartient à la étudiant_id student id est égal à ma zone de texte en vb.net, c'est là que je vais taper le numéro d'étudiant de l'étudiant. Merci beaucoup.

EDIT : J'essaie d'afficher la valeur de tous les noms de matières de l'id de l'étudiant entré dans la zone de texte. Voici mon code vb.qui affiche uniquement la première matière. sujet_tbl

cmd = New MySqlCommand(sql, myconn)
        dr = cmd.ExecuteReader
        If dr.Read = True Then
            TextBox2.Text = dr(0)
            'Label4.Text = dr(1)
            TextBox4.Text = dr(1)
            TextBox5.Text = dr(2)
            TextBox6.Text = dr(3)
            TextBox7.Text = dr(4)
            TextBox8.Text = dr(5)
            dr.Close()

1voto

Hadi Points 16319

Vous n'avez pas besoin de joindre avec la table Students, puisque les Id sont stockés dans la table jonction aussi et vous ne récupérez pas les informations sur les étudiants, aussi utilisez la commande paramétrée au lieu de construire la commande manuellement. pour éviter l'injection SQL .

Essayez d'utiliser le code suivant :

Dim strQuery as string = "SELECT subject_name " & _
" FROM student_subject " & _
" INNER JOIN subject_bsit ON subject_bsit.subject_id = student_subject.sub_id" & _
" WHERE student_subject.student_id = @StudentID"

Dim cmd as New MySqlCommand(strQuery,connection)

cmd.AddParameterWithValue("@StudentID",Textbox1.text)

cmd.ExecuteReader()

Mise à jour 1

L'index que vous passez à l'objet datareader est l'index de la colonne et non celui de la ligne. Vous devez également utiliser une boucle au lieu d'une condition if :

cmd = New MySqlCommand(sql, myconn)
dr = cmd.ExecuteReader()

While dr.Read = True Then

    Msgbox(dr(0).Tostring())

End While
dr.Close()

Mise à jour 2 - passage du nom des zones de texte de façon dynamique

Tout d'abord, vous devez vous assurer que le nombre de zones de texte est inférieur ou égal au nombre de lignes retournées.

cmd = New MySqlCommand(sql, myconn)
dr = cmd.ExecuteReader()
Dim cnt as Integer = 1

While dr.Read = True Then

    Dim txt As New TextBox = DirectCast(Me.Controls.Find(string.Format("Textbox{0}", cnt ),false).FirstOrDefault(),Textbox);

    txt.Text = dr(0).ToString()

    cnt += 1

End While
dr.Close()

Mais pourquoi ne pas afficher les résultats dans un GridView ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X