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
.
数据库中的相关记录
我创建了一个 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
.