VB.NET Winforms2 ensembles de données (une à plusieurs lignes)
je dois comparer 2 datatables (qui sont chacun dans leur propre ensemble de données) et conclure avec un arrêt de OK ou NG, on est une table de référence , l'autre est des données brutes d'une machine. Une table aurait une ligne avec une QTY, l'autre table aurait plusieurs lignes pour correspondre à cette QTÉ, j'espère. Le but ici est de vérifier les valeurs de couple sur les fixations. Le premier tableau ici est les données que je recevrais comme ce qui serait nécessaire pour que les couples passent. Appelons cette table 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 sera la colonne commune entre les 2 ensembles de données.
Utilisons la dernière ligne comme exemple. La dernière rangée me dit que j'ai besoin de 2 couples de NINDEX 12 avec une valeur entre 4.5 - 7.5.
Voici les données que je dois juger. Appelons cette table 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
Le jugement doit avoir correspondance nIndex entre les 2 tables, NTORQUE_STATUS doit être 1 et NTORQUE_VALEU doit être comprise entre NMIN et nmax dtTorquesRequired.
Maintenant, je le fais actuellement dans mon application en utilisant uniquement les résultats du nombre de lignes SQL, mais il est lent. Je le fais par l'intermédiaire de plusieurs appels bavards au lieu d'un appel massif à la base de données, puis travailler avec les jeux de données résultants.
C'est comme ça que je le fais actuellement, mais c'est lent. Je veux faire tout le traitement localement au lieu d'utiliser 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
Comment puis-je interroger un objet datatable localement à l'aide VB.NET sans utiliser SQL
Merci à l'avance
Vous devez activer le paramètre 'Option Strict On'. Ce "SQL Helper" doit également générer de nombreuses conversions de types de données. DataTables peut être interrogé, donc à moins de nombreuses lignes, vous pouvez le faire plutôt que d'exécuter une nouvelle requête pour chaque ligne. – Plutonix
Si vous utilisez SQL Server 2008 et supérieur, vous pouvez utiliser [Paramètres Table-Value] (https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/table-valued-parameters # creating-table-valued-parameter-types), que vous pouvez utiliser pour passer une table de données entière à une procédure stockée et la traiter en masse. –