从1列中选择所有数据

时间:2013-04-17 11:43:29

标签: sql vb.net

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

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

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

有人可以帮忙吗?

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

4 个答案:

答案 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")