Sql 从1列中选择所有数据

Sql 从1列中选择所有数据,sql,vb.net,Sql,Vb.net,我有一个代码,应该根据选择的学校从模块中提取所有“课程名称” 例如,生物学院有“生物化学”和“海洋生物学”模块。为了在计算中使用,我需要选择这两个选项 目前,当代码运行时,它只需要第一个模块,即“生物化学”,但我需要它来选择所有模块 有人能帮忙吗 Dim courseSelectCom As New SqlCommand("SELECT course_name FROM course where school= '%"schoolSelect & "' ", _

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

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

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

有人能帮忙吗

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

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

Dim courseSelectCom As New SqlCommand("SELECT course_name FROM course where school=@School", _connection)

courseSelectCom.Parameter.Add("@School", SqlDbType.VarChar).Value = SchoolSelect.Text

SchoolSelect
是一个文本框,您可以从中选择school

查询的第一件事是使用参数化查询。
这将避免错误和解析问题

然后,您应该解释为什么在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或其他任何东西。

如果您希望所有课程都在逗号分隔的列表中,那么请使用
group\u concat
(假设您使用的是MySQL):

这将返回一行,所有课程都在一列中,如
“生物化学,海洋生物学”

要在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")

将courseNumbers设置为字符串courseNumbers=CType(courseSelectCom.ExecuteScalar(),String),这将只提供第一个值。对于需要使用ExecuteReader或使用DataAdapter来填充数据集的所有值,您能否给我一个示例,说明在我的情况下如何使用读取器?请查看此url谢谢,是否有方法将读取器的结果分配给可用于此查询的字符串?它以前使用了“courseselectcom”命令转换为字符串的结果“coursenumbers”变量。使用totalStudentCom作为新的SqlCommand(“从学生中选择计数(学生ID),其中课程名称如“%”和coursenumbers&“”,uConnection)是,添加了一个StringBuilder,它在其内部缓冲区中收集各个记录,并用换行符分隔每个记录。您可以使用它设置多行文本框的文本属性,并在程序中显示结果。或者您可以使用一个集合列表(字符串)并将每条记录添加到集合谢谢,但是为了使用上一个查询的结果,我应该如何或如何在第二个sql查询中输入该结果?要在第二个查询中使用该结果作为where子句的输入,我认为您需要使用一种非常不同的方法。您可能需要一个执行或接收数据的StoredProcess。我认为,如果您发布一个新问题,则可以更好地处理此问题。如果出现错误,则“group_concat”不是可识别的内置函数名。@d99。你知道你的底层数据库是什么吗?哦,我明白了,可能是SQL Server或Access。在那些数据库中更难做到。是的sql server,很抱歉我没有注意到mysql部分。sql server中是否有任何等价的东西?如何将此代码写入此sql查询?当我尝试实现它时,总是会出错。Dim courseSelectCom作为新的SqlCommand(“选择课程”\u name FROM course where school='%”“school SELECT&“”,\u connection)谢谢,我如何将结果输入到第二个查询中,我是否必须尝试使用读卡器?
Dim reader = courseSelectCom.ExecuteReader()
reader.Read()
reader("course_names")