【发布时间】:2018-04-01 02:33:14
【问题描述】:
VB.NET Winforms
我需要比较 2 个数据表(每个数据表都在自己的数据集中)并得出 OK 或 NG 的判断,一个是参考表,另一个是来自机器的原始数据。一个表会有一行有一个数量,另一个表会有多行来匹配那个数量,希望如此。此处的目的是验证紧固件的扭矩值。这里的第一个表是我将获得的数据,作为扭矩传递所需的数据。我们称这张表为dtTorquesRequired:
NINDEX NQTY_REQ NMIN NMAX
7 1 33.0 59.0
8 4 33.0 59.0
9 2 4.5 7.5
12 2 4.5 7.5
NINDEX 将是两个数据集之间的公共列。
让我们以最后一行为例。最后一行告诉我,我需要从 NINDEX 12 获得 2 个扭矩,其值在 4.5 - 7.5 之间。
这是我要判断的数据。我们称这张表为dtTorquesPerformed:
NINDEX NTORQUE_NO NTORQUE_STATUS NTORQUE_VALUE
7 1 1 42.56
8 1 1 42.22
8 2 1 42.49
8 3 1 42.10
8 4 1 42.37
9 1 1 7.01
9 2 1 7.10
12 1 1 5.68
12 2 1 5.81
判断需要2个表之间有NINDEX匹配,NTORQUE_STATUS必须为1,dtTorquesRequired中NTORQUE_VALEU必须在NMIN和NMAX之间。
现在,我目前在我的应用程序中只使用 SQL 行计数结果来执行此操作,但速度很慢。我通过多次聊天调用而不是对数据库的粗略调用来做到这一点,然后使用生成的数据集。
这是我目前的做法,但速度很慢。我想在本地完成所有处理,而不是使用 SQL:
Private Function TorqueJudgement(ckanban As String) As Boolean
Dim ccode As String
Dim cline As String
Dim dsTorquesRequired As New DataSet
Dim dtTorquesRequired As New DataTable
Dim AreAllTorquesGood As Boolean = False
Dim BadTorqueCount As Int16 = 0
ccode = ckanban.Substring(0, 5)
cline = ckanban.Substring(5, 2)
SQL.ExecQuery("SELECT ....") ''GETS DTTORQUESREQUIRED
dsTorquesRequired = SQL.SQLDS
dtTorquesRequired = dsTorquesRequired.Tables(0)
dtTorquesRequired.Columns.Add("PassFail")
Dim rc As Int16 = -1 '//
For Each dr As DataRow In dsTorquesRequired.Tables(0).Rows
rc += 1
Dim nindex As Int16 = dr("NINDEX")
Dim qtyrequired As Int16 = dr("NQTY_REQ")
Dim nmin As Decimal = dr("NMIN")
Dim nmax As Decimal = dr("NMAX")
SQL.AddParam("@CKANBAN", ckanban)
SQL.AddParam("@NINDEX", nindex)
SQL.AddParam("@QTY_REQ", qtyrequired)
SQL.AddParam("@NMIN", nmin)
SQL.AddParam("@NMAX", nmax)
SQL.ExecQuery("SELECT ...") ''Searches for rows that match dtTorquesRequired
dtTorquesRequired.Rows(rc)("PassFail") = SQL.RecordCount
If Not dtTorquesRequired.Rows(rc)("NQTY_REQ") <= dtTorquesRequired.Rows(rc)("PassFail") Then
BadTorqueCount += 1
End If
Next
If BadTorqueCount > 0 Then
AreAllTorquesGood = False
ElseIf BadTorqueCount = 0 Then
AreAllTorquesGood = True
End If
Return AreAllTorquesGood
End Function
如何在不使用 SQL 的情况下使用 VB.NET 在本地查询数据表对象
提前致谢
【问题讨论】:
-
你应该设置
Option Strict On。该“SQL Helper”也必须导致许多数据类型转换。可以查询数据表,因此除非有很多行,否则您可以这样做,而不是为每一行运行一个新查询。 -
如果您使用的是sql server 2008及以上版本,则可以使用Table-Value Parameters,您可以将整个数据表传递给存储过程并批量处理。