与关系 vb.net 计数表
Posted
技术标签:
【中文标题】与关系 vb.net 计数表【英文标题】:count table with relationship vb.net 【发布时间】:2019-03-21 12:06:27 【问题描述】:我有 2 个数据库表,即办公室和状态。状态包括有缺陷、缺少部件和丢失。我想要发生的事情是,每当我选择一个办公室时,该办公室的有缺陷、丢失的部件和丢失的物品都会被统计并显示在文本框或标签中。
截图:
sqlconnection.Open()
Dim cmd As New mysqlCommand("Select Count(*) from cpfrtsdata where office = '" & ComboBox1.Text & "' ", sqlconnection)
Dim i As Integer = cmd.ExecuteScalar()
cmd = Nothing
sqlconnection.Close()
Label3.Text = i
【问题讨论】:
还不完全清楚。你需要帮助做计数逻辑还是显示逻辑?您已经告诉我们您想要发生的事情,但没有告诉我们您遇到的问题,或者向我们提供了不符合预期的代码。 sqlconnection.Open() Dim cmd As New MySqlCommand("Select Count(*) from cpfrtsdata where office = '" & ComboBox1.Text & "'", sqlconnection) Dim i As Integer = cmd. ExecuteScalar() cmd = Nothing sqlconnection.Close() Label3.Text = 我有这段代码,但这只会显示每个办公室的总物品,而不是每个有缺陷、缺失的部件或丢失的物品 【参考方案1】:Select Count(*) from cpfrtsdata where office = 'Carpentry Shop'
将返回办公室等于Carpentry Shop
的记录数。为了得到每个status
的总数,您需要多次发出SQL事务,如下所示:
Select Count(*) from cpfrtsdata where office = 'Carpentry Shop' and status = 'Defective'
Select Count(*) from cpfrtsdata where office = 'Carpentry Shop' and status = 'Lost'
等等。或者您可以修改您的 SQL 以在一个事务中检索所有内容:
Select
sum(case status when 'Defective' then 1 else 0 end) as TotalDefective,
sum(case status when 'Lost' then 1 else 0 end) as TotalLost,
sum(case status when 'Missing Parts' then 1 else 0 end) as TotalMissingParts
from cpfrtsdata
where office = 'Carpentry Shop'
group by office
由于该查询返回的是表,所以需要使用MySqlDataAdapter
或cmd.ExecuteReader
。
【讨论】:
非常好!我在 SSMS 中玩了一会儿才弄明白。在 SQL Server 中,我不需要 group by。绝对是赞成票。 如果您需要查找特定办公室的总数,则不需要 group by 子句。但如果您需要检索结果集中每个办公室的总计,则需要 group by。 ("Select Count(*) from cpfrtsdata where office = '" & ComboBox1.Text & "' and status = 'Defective'", sqlconnection) 这就是我所做的,只要用户选择另一个办公室,系统将只计算所选办公室中的缺陷品。谢谢你的想法。【参考方案2】:我要检查的第一件事是验证您是否从组合框中返回了一个值。逐步调试调试器并验证预期值。然后检查以确保您从查询中获得了一个值。给你的控件起一个比 ComboBox1 和 Label3 更好的名字,使用默认名字很容易使用错误的控件。
我会从使用 text 属性切换到 SelectedItem 以从控件中取回值。
MS Docs 谈到组合框:
您可以使用这些属性来管理当前选中的项目 列表中,Text 属性指定显示在 编辑字段,SelectedIndex 属性获取或设置当前 item 和 SelectedItem 属性以获取或设置对 对象。
Dim officeString As String = ComboBox1.SelectedItem.ToString()
另外,您需要在查询中使用参数来防止 SQL 注入攻击
【讨论】:
以上是关于与关系 vb.net 计数表的主要内容,如果未能解决你的问题,请参考以下文章