gpt4 book ai didi

mysql - 如何根据学号在联结表上进行选择

转载 作者:可可西里 更新时间:2023-11-01 07:38:16 24 4
gpt4 key购买 nike

首先抱歉我的英语不好。

我在使用联结表时遇到问题,它只返回 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 学生 ID 的所有 subject name 等于我在 vb.net 中的文本框我将在其中输入学生的学号。非常感谢。

编辑:我试图在文本框中显示输入的学生 ID 的所有主题名称的值。这是我的 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()

最佳答案

您不必与 Students 表连接,因为 Id 也存储在连接表中并且您不会检索学生信息,还可以使用参数化命令而不是手动构建命令以避免 SQL 注入(inject).

尝试使用以下代码:

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

您传递给 datareader 对象的索引是列索引而不是行索引,您还必须使用循环而不是 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 中显示结果?

关于mysql - 如何根据学号在联结表上进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55201591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com