Как выбрать на соединительной таблице в зависимости от студенческого идентификатора - PullRequest
4 голосов
/ 17 марта 2019

сначала извините, мой английский плохой.

У меня проблема с использованием соединительной таблицы, она возвращает только 1 предмет, это мой запрос.

У меня есть Student_tbl , Subject_tbl , student_subject_tbl таблица соединений.

И это мой запрос, я использую 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 & "'"

Что я хочудля этого я просто хочу выбрать все имя субъекта , принадлежащее student_id идентификатор студента равен моему текстовому полю в vb.net, где я буду вводить идентификатор студентаученик.Огромное спасибо.

РЕДАКТИРОВАТЬ: Я пытаюсь отобразить значение всего имени субъекта введенного идентификатора студента в текстовом поле.это мой vb.code при его отображении отображается только первая тема subject_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()

1 Ответ

1 голос
/ 17 марта 2019

Вам не нужно объединяться с таблицей студентов, так как идентификаторы хранятся в соединительной таблице, и вы не получаете информацию о студентах, также используйте параметризованную команду вместо того, чтобы собирать команду вручную , чтобы избежать внедрения SQL .

Попробуйте использовать следующий код:

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()

Обновление 1

Индекс, который вы передаете объекту чтения данных, также является индексом столбца, а не индексом строки.Вы должны использовать цикл вместо условия if:

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

While dr.Read = True Then

    Msgbox(dr(0).Tostring())

End While
dr.Close()

Обновление 2 - передача имени текстового поля динамически

Сначала необходимо убедиться, что количество текстовых полей меньше или равноравно числу возвращенных строк.

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()

Но почему не отображаются результаты в GridView ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...