0

我的代码应该根据选择的学校从模块中获取所有“课程名称”。

例如,生物学院有“生物化学”和“海洋生物学”模块。我需要选择这两个才能在计算中使用。

目前,当代码运行时,它只会采用第一个模块,即“生物化学”,但我需要它来选择所有模块。

任何人都可以帮忙吗?

  Dim courseSelectCom As New SqlCommand("SELECT course_name FROM course where school= '%"schoolSelect & "' ", _
                                connection)
4

4 回答 4

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 或其他任何东西......

于 2013-04-17T12:09:42.397 回答
0

你用什么来执行命令?如果你使用 ExecuteScalar,你只会得到第一个结果。使用 ExecuteReader 并通读或使用 DataAdapter 并用它填充 DataSet。

于 2013-04-17T11:54:41.077 回答
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")
于 2013-04-17T13:26:44.523 回答
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是您从中选择学校的文本框

于 2013-04-17T11:56:37.797 回答