Before this, I encouter a problem when my for loop takes a very long time to execute and cause the time out. I have successfully solved the problem by using parallel loop which has been introduced by our friend
here[
^]
The problem now is, some data retrieved are wrong when compared to original data where the data has been taken. Is that anything to do with the loop?
Here is the code.
Parallel.For(0, dtMc.Rows.Count, Sub(i)
Dim mcno As String = dtMc.Rows(i)("MCNO_N")
Dim sqlPC As String = "Select PARTCODE_T FROM MC_PARTCODE_MASTER WHERE MCNO_N = '" & mcno & "'"
Dim pc As String = DBLayer.Util.Data.MsSql.DBFunction.executeScalar(sqlPC, connEPJSetting)
Dim sqlMcType As String = "SELECT MCTYPE_T FROM MC_MASTER WHERE MCNO_N = '" & mcno & "' AND DEPTID_T = 'PD1' "
Dim mctype As String = DBLayer.Util.Data.MsSql.DBFunction.executeScalar(sqlMcType, connEPJSetting)
If Not mctype Is Nothing Or Not IsDBNull(mctype) Then
type = "'" & mctype & "'"
Else
type = "NULL"
End If
If Not pc Is Nothing Then
partcode = "'" & pc & "'"
Dim sqlMpInspect As String = "SELECT HEADER.GROUPCODE_T, HEADER.MONTH_T,HEADER.SHOPGROUP_T, HEADER.MCNO_N, HEADER.PARTC" & _
"ODE_T, HEADER.ACTCT_T, dbo.MCINFO_DETAILS.ROLEID_N, EPJ_Employee.dbo.E" & _
"MPLOYEE_DATA.NAME_T FROM (SELECT GROUPCODE_T, MONTH_T, MCNO_N, PARTCOD" & _
"E_T, ACTCT_T, SHOPGROUP_T FROM dbo.MCINFO_HEADER WHERE (MONTH_T = (SELECT MAX(MONTH" & _
"_T) AS MAXMTH FROM dbo.MCINFO_HEADER AS MCINFO_HEADER_1 WHERE (MCNO_N " & _
"= '" & mcno & "'))) AND (MCNO_N = '" & mcno & "') AND (PARTCODE_T = '" & pc & "')) AS" & _
" HEADER INNER JOIN dbo.MCINFO_DETAILS ON HEADER.MONTH_T = dbo.MCINFO_D" & _
"ETAILS.MONTH_T AND HEADER.MCNO_N = dbo.MCINFO_DETAILS.MCNO_N AND HEADE" & _
"R.PARTCODE_T = dbo.MCINFO_DETAILS.PARTCODE_T INNER JOIN EPJ_Employee.d" & _
"bo.EMPLOYEE_DATA ON dbo.MCINFO_DETAILS.EMPID_T = EPJ_Employee.dbo.EMPL" & _
"OYEE_DATA.EMPID_T WHERE (dbo.MCINFO_DETAILS.ROLEID_N = 2) "
Dim dtInspect As DataRow = DBLayer.Util.Data.MsSql.DBFunction.executeRowScalar(sqlMpInspect, connEPJSetting)
If Not dtInspect Is Nothing Then
act = "'" & dtInspect("ACTCT_T") & "'"
groupcode = "'" & dtInspect("GROUPCODE_T") & "'"
leader = "'" & dtInspect("NAME_T") & "'"
shopgroup = "'" & dtInspect("SHOPGROUP_T") & "'"
Dim sqlMpPlanning As String = "SELECT * FROM Q_MPPLANNING_MCLOC WHERE ITEM_CODE_T = '" & pc & "' "
Dim dtPlanning As DataRow = DBLayer.Util.Data.MsSql.DBFunction.executeRowScalar(sqlMpPlanning, connEPJSetting)
If Not dtPlanning Is Nothing Then
Sct = "'" & dtPlanning("CT_N") & "'"
matcode = "'" & dtPlanning("DIMENSION_T") & "'"
calibration = "'" & dtPlanning("CALIBRATION_T") & "'"
Else
Sct = "NULL"
matcode = "NULL"
calibration = "NULL"
End If
Else
act = "NULL"
groupcode = "NULL"
leader = "NULL"
shopgroup = "NULL"
Sct = "NULL"
matcode = "NULL"
calibration = "NULL"
End If
Dim sqlMCStat As String = "SELECT MCSTATID_N FROM MCPLAN_DATA PLANDATA " & _
" WHERE PLANDATA.MCNO_N = '" & mcno & "' AND CONVERT(DATE, DATE_D, 102) = CONVERT(DATE, GETDATE(), 102) "
Dim drMcStatus As DataRow = DBLayer.Util.Data.MsSql.DBFunction.executeRowScalar(sqlMCStat, connEPJSetting)
If drMcStatus Is Nothing Then
stat = "NULL"
Else
stat = "'" & drMcStatus("MCSTATID_N") & "'"
End If
Else
Sct = "NULL"
matcode = "NULL"
calibration = "NULL"
act = "NULL"
groupcode = "NULL"
leader = "NULL"
stat = "NULL"
partcode = "NULL"
shopgroup = "NULL"
End If
Dim str As String = "UPDATE MC_INFO_TRACKING SET GROUP_T = " & groupcode & ", LEADER_T = " & leader & ", PARTCODE_T= " & partcode & " , ACTCT_T = " & act & ", MATCODE_T = " & matcode & ", CALIBER_T = " & calibration & ", MCSTAT_N = " & stat & ", DATEMODIFY_D = GETDATE(), STD_CT_T = " & Sct & " WHERE MCNO_N = '" & mcno & "'"
Dim a As Object = DBLayer.Util.Data.MsSql.DBFunction.executeNonQuery(str, connEPJSetting)
Dim strB As String = "UPDATE MC_INFO_TRACKING_HEADER SET MC_TYPE_CODE_T = " & type & " WHERE MCNO_N = '" & mcno & "'"
Dim b As Object = DBLayer.Util.Data.MsSql.DBFunction.executeNonQuery(strB, connEPJSetting)
End Sub)
Updated:
After doing some study on my code, I tried to retrieve just one data and debug it one by one. Look example below.
No Item
701 00273991L-T7N
702 00361541L-T7N
703 00273991L-T7N
704 00361372L-T7S
705 0027268KL-T7N
see no 701 and 703. For no 703, the loop reverse back and filter Item for no 701. the item no for 703 should be 02725100L-T7N. Why is that happening?