Вам не нужно объединяться с таблицей студентов, так как идентификаторы хранятся в соединительной таблице, и вы не получаете информацию о студентах, также используйте параметризованную команду вместо того, чтобы собирать команду вручную , чтобы избежать внедрения 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 ??