VB.NET的WinForms比较2个集(一对多行)
我需要比较2个数据表(即各自己的数据集内),并与正常或异常的判断得出结论,一个是参考表另一个是机器的原始数据。一张桌子上会有一行有数量,另一张桌子会有多行以匹配那个数量,希望。这里的目的是验证紧固件的扭矩值。这里的第一个表格是我将得到的数据,作为扭矩传递所需的数据。让我们把这个表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将是2个数据集之间的公共列。
我们以最后一行为例。最后一行告诉我,我需要从NINDEX 12中获得两个扭矩,其值在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,和NTORQUE_VALEU必须dtTorquesRequired在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
我如何可以查询DataTable对象在本地使用VB.NET,而不使用SQL
在此先感谢
您应该将设置为'Option Strict On'。那个“SQL Helper”也必须导致很多数据类型转换。可以查询数据表,因此除非有许多行,否则可以这样做,而不是为每行都运行新的查询。 – Plutonix
如果您使用的是sql server 2008及更高版本,则可以使用[Table-Value Parameters](https://docs.microsoft.com/zh-cn/dotnet/framework/data/adonet/sql/table-valued-parameters #created-table-valued -value-parameter-types),您可以使用它来将整个数据表传递给存储过程并批量处理。 –