VB - sql 查询到 reader 或数据表然后到文本框

VB - sql query to reader or datatable then to text boxes

我创建了一个 SQL 查询 return 是 table:

家庭 |问题
家庭一个 | 11
家庭 b | 5
家庭c | 17
家庭 d | 28

我已经在 Visual Basic (visual studio 2015) 中使用以下代码return将此数据编辑为数据table:

Dim cn As New SqlConnection
Dim conn As New SqlConnection("connection string here")

Dim cmd As New SqlCommand
Dim reader As SqlDataReader
Dim da2 As New SqlDataAdapter
cmd.CommandText = "select ........ "
cmd.CommandType = CommandType.Text
cmd.Connection = conn

reader = cmd.ExecuteReader()`

*这是我迷路的地方*

我需要代码 select 基于第 1 列(系列)中的值的问题数量(第 2 列)

我的问题是,有时其中一个家庭可能没有记录,因此数据集可能只有家庭 a、c 和 d...下一次它可能有家庭 b 和 d。所以我不能真正使用行(#)。我需要可以引用姓氏的代码,然后 return 问题的数量,将该数字放入字符串中,然后将该值放入文本框中。

我很擅长将字符串分配给一个变量,然后输入文本框...它是我无法弄清楚的中间值!

谢谢!

Private Sub GetFamilyIssues(ByVal FamilyName As String)
    Dim cn As New SqlConnection("connection string here")
    cn.Open()

    Dim sql As String = "select * from FamilyIssues where FAMILY = @Family"

    Dim cmd As New SqlCommand(sql, cn)
    cmd.Parameters.AddWithValue("@Family", FamilyName)

    Dim reader As SqlDataReader = cmd.ExecuteReader

    txtIssues.Text = ""
    If reader.HasRows Then
        txtIssues.Text = reader("ISSUES").ToString()
    End If

    cn.Close()
End Sub

我建议使用 SqlDataAdapter 来填充 DataTable,然后使用 Linq-To-DataTable 来获取您需要的内容。此外,始终使用 using-语句:

Dim table = New DataTable()
Using conn As New SqlConnection("connection string here")
    Using da = New SqlDataAdapter("select ........ ", conn)
        da.Fill(table)
    End Using
End Using

Dim matchingFamily = From row In table.AsEnumerable()
                     Where row.Field(Of String)("Family") = "family a"
If matchingFamily.Any() Then
    Dim familyIssueCount As Int32 = matchingFamily.First().Field(Of Int32)("Issues")
    ' ... '
End If

如果可能有多行包含此系列,您可能会使用不同的方法,因为 First 将选择任意行。一种方法是使用 For Each 来枚举它们或使用 matchingFamily.Sum(Function(r) r.Field(Of Int32)("Issues")) 来总结问题。

如果您不需要内存中的所有记录,您也可以 select 仅使用 ...WHERE Family = @family.

数据库中的相关记录