我的代码应该根据所选择的学校从模块中获取所有“课程名称”。
例如,生物学院有“生物化学”和“海洋生物学”模块。我需要选择这两个以便在计算中使用。
目前,当代码运行时,它只会采用第一个模块,即“生物化学”,但我需要它来选择所有模块。
有人可以帮忙吗?
Dim courseSelectCom As New SqlCommand("SELECT course_name FROM course where school= '%"schoolSelect & "' ", _
connection)
答案 0 :(得分:1)
您的查询要做的第一件事是使用参数化查询 这将避免Sql Injection和解析问题。
然后你应该解释为什么你在SchoolSelect前面使用通配符%
你有很多以相同后缀结尾的学校吗?你想要找回所有这些吗?
最后,您应该使用DataReader循环返回的数据或使用DataAdapter来填充DataTable。
总结
Dim sb = new StringBuilder()
Using connection = New SqlConnection("your_con_string_here")
connection.Open()
Dim courseSelectCom = New SqlCommand("SELECT course_name FROM course where school=@schoolName", connection)
courseSelectCom.Parameters.AddWithValue("@schoolName", SchoolSelect.Text)
Dim reader = courseSelectCom.ExecuteReader()
while reader.Read()
sb.AppendLine(reader("course_name")) ' or add to some kind of list to reuse'
End While
End Using
Console.WriteLine(sb.ToString())
如果要将数据存储在DataTable中,则用
替换DataReader循环 Dim dt = New DataTable()
Dim da = New SqlDataAdapter(courseSelectCom)
da.Fill(dt)
你有一个DataTable对象用于绑定到DataGridView,Listbox或其他......
答案 1 :(得分:0)
您在执行命令时使用了什么? 如果您使用ExecuteScalar,您将只获得第一个结果。 使用ExecuteReader并读取或使用DataAdapter并使用它填充DataSet。
答案 2 :(得分:0)
Dim courseSelectCom As New SqlCommand("SELECT course_name FROM course where school=@School", _connection)
courseSelectCom.Parameter.Add("@School", SqlDbType.VarChar).Value = SchoolSelect.Text
SchoolSelect
是您选择学校的文本框
答案 3 :(得分:0)
如果您希望所有课程都以逗号分隔的列表,请使用group_concat
(假设您使用的是MySQL):
SELECT group_concat(course_name)
FROM course
where school= '%"schoolSelect & "'
这会返回一行,所有课程都在一列中,例如'biochemistry,marine biology'
。
要在SQL Server中执行此操作,您可以执行以下操作:
select stuff((select ','+course_name from course where school= '%"schoolSelect & "' for xml path ('')),
1, 1, '') as coursenames
SQL Server没有本机聚合字符串连接运算符,因此它使用数据库的XML功能。
我认为它会写成:
Dim courseSelectCom = New SqlCommand("select stuff((select ','+course_name from course where school= '%"schoolSelect & "' for xml path ('')), 1, 1, '') as coursenames", connection)
你需要这样的东西:
Dim reader = courseSelectCom.ExecuteReader()
reader.Read()
reader("course_names")