Converti questo codice vb6 in c# utilizzando una connessione ad access, dove il percorso del file mdb si trova nella variabile mdlSupportoGenerale.PercorsoDb:
Private Sub AggiornaFgridRep()
Dim Sql As String
Dim rsRep As Recordset, rsCar As Recordset, rsRiep As Recordset
Dim rsFasi As Recordset, rsLis As Recordset
'Dim rsCC As Recordset
Dim Riga As String
Dim OraInizioElab As Date, OraFineElab As Date
Dim dataDA As String, DataAl As String
Dim CodDip2 As String, DataCart As String
Dim NR As Long
Dim DataCA As String
Dim oraEnt As String, OraUsc As String, OreEff As Single
Dim idRep As Long
Dim Sec As Long, Ore As String, TotSec As Long
Dim Id As Long
Dim I As Integer
Dim T As Integer
Dim DataIN As String, DataFI As String
Dim InizioFASE As String, FineFASE As String
Dim InizioINT As String, FineINT As String
Dim SecEff As Long, totSecEff As Long
Dim SecProd As Long, totSecProd As Long
Dim IdRepP As Long, NumL As Long, CodFin As String
Dim Pos As Integer
Dim CodCom As Long
Dim DataB As String, strDataB As String, Esiste As Boolean
Dim rsRiep2 As Recordset
'Dim Fase As String

    'Carico i reparti
    Sql = "SELECT Id,Descrizione FROM tbl_Reparti ORDER BY Descrizione"
    Set rsRep = Db.OpenRecordset(Sql)
    FgridRep.Rows = 1
    With rsRep
        While .EOF = False
            Riga = Chr(9) & .Fields("Id") & Chr(9) & " " & .Fields("Descrizione")
            FgridRep.AddItem Riga
           .MoveNext
        Wend
    End With
    Set rsRep = Nothing
    Riga = Chr(9) & Chr(9) & "senza reparto"
    FgridRep.AddItem Riga

    BtnStop.Visible = True
    chkEscludiVisit.Visible = False
    chkSoloVisit.Visible = False
    OraInizioElab = Now
    Ferma = False
    
    'disabilito gli oggetti
    cmdEsci.Enabled = False
    BtnAggiorna.Enabled = False
    gridDip.Enabled = False
    dtAl.Enabled = False
    DTda.Enabled = False

    'Svuota tabelle temporanee dati
    Sql = "UPDATE Riepilogo_oreCart SET Valid=0 " _
        & "WHERE Valid=1"
    Db.Execute (Sql)
    Sql = "UPDATE Riepilogo_oreProd SET Valid=0 " _
        & "WHERE Valid=1"
    Db.Execute (Sql)
    
    'Vista Listino
    Sql = "SELECT Codice,Linea,IdRep FROM vst_Listino2 WHERE Linea IS NOT NULL"
    Set rsLis = Db.OpenRecordset(Sql)
    
    'Recordset commesse chiuse
    'Sql = "SELECT CodCommessa,CodiceFinito FROM CommesseChiuse"
    'Set rsCC = Db.OpenRecordset(Sql)

    'Calcolo ore
    Sql = "SELECT CodDipendente,Data,Entrata,Uscita,OreEff,IdRep " _
        & "FROM Cartellini WHERE Uscita<>#0.00.00#"
    If IsNull(DTda) = False Then
        dataDA = Format(DTda, "yyyy/mm/dd")
        Sql = Sql & " AND Data>=#" & dataDA & "#"
    End If
    If IsNull(dtAl) = False Then
        DataAl = Format(dtAl, "yyyy/mm/dd")
        Sql = Sql & " AND Data<=#" & DataAl & "#"
    End If
    If chkTutti = Unchecked Then
        Sql = Sql & " AND CodDipendente='" & CodDip & "'"
    Else
        If chkEscludiVisit = 1 Then Sql = Sql & " AND CodDipendente NOT LIKE 'visit*'"
        If chkSoloVisit = 1 Then Sql = Sql & " AND CodDipendente LIKE 'visit*'"
    End If
    Sql = Sql & " ORDER BY Data,CodDipendente,CodTimbratura"

    Set rsCar = Db.OpenRecordset(Sql)
    If rsCar.RecordCount > 0 Then rsCar.MoveLast: rsCar.MoveFirst
    NR = rsCar.RecordCount
    'MsgBox NR
    If NR = 0 Then NR = 1
    PBar1 = 0
    PBar1.Max = NR
    PBar1.Visible = True
    While rsCar.EOF = False And Ferma = False
        CodDip2 = rsCar.Fields("CodDipendente")
        DataCA = rsCar.Fields("Data")
        DataCart = Format(DataCA, "yyyy/mm/dd")
        oraEnt = rsCar.Fields("Entrata")
        OraUsc = rsCar.Fields("Uscita")
        OreEff = 0
        If IsNull(rsCar.Fields("OreEff")) = False Then OreEff = rsCar.Fields("OreEff")
        idRep = 0
        If IsNull(rsCar.Fields("IdRep")) = False Then idRep = rsCar.Fields("IdRep")
        'MsgBox DataCA & " - " & oraEnt, , "cartellino"
        
        'Calcolo ORE TIMBRATURE
        Sec = DateDiff("s", oraEnt, OraUsc)
        
        'Calcolo ORE EFFETTIVE
        SecEff = OreEff * 3600
        
        'Inserimento dati in tabella Riepilogo_oreCart
        Sql = "SELECT Id FROM Riepilogo_oreCart WHERE Valid=0"
        Set rsRiep = Db.OpenRecordset(Sql)
        If rsRiep.RecordCount > 0 Then
            Id = rsRiep.Fields("Id")
            Sql = "UPDATE Riepilogo_oreCart SET Valid=1," _
                & "CodDipendente='" & CodDip2 & "',Data=#" & DataCart & "#," _
                & "TotSecTimbr=" & Sec & "," _
                & "TotSecEff=" & SecEff & "," _
                & "IdRep=" & idRep & " " _
                & "WHERE Id=" & Id
        Else
            Sql = "INSERT INTO Riepilogo_oreCart " _
                & "(Valid,CodDipendente,Data,TotSecTimbr,TotSecEff,IdRep) " _
                & "VALUES (1,'" & CodDip2 & "',#" & DataCart & "#," & Sec _
                & "," & SecEff & "," & idRep & ")"
        End If
        Db.Execute (Sql)
        Set rsRiep = Nothing
        
        'Calcolo ORE PRODUZIONE
        For T = 1 To 2  '1 to 2
            Sql = "SELECT CodiceFinito,DataInizio,OraInizio,[Data fine],[Ora fine]"
            'Sql = "SELECT CodiceFinito,Fase,DataInizio,OraInizio,[Data fine],[Ora fine]"
            If T = 1 Then Sql = Sql & " FROM CommesseChiuse_Fasi WHERE "
            If T = 2 Then Sql = Sql & " FROM Fasi WHERE "
            Sql = Sql & "(DataInizio=#" & DataCart & "# OR [Data fine]=#" & DataCart & "#) " _
                      & "AND DataInizio IS NOT NULL AND [Data fine] IS NOT NULL " _
                      & "AND CodDipendente='" & CodDip2 & "' " _
                      & "AND Chiusa='CHIUSA' "
            If T = 2 Then 'aggiunto in ver.5.00.53
                Sql = Sql & "AND CodFase NOT IN " _
                          & "(SELECT CodFase FROM CommesseChiuse_Fasi) "
            End If
            Sql = Sql & "GROUP BY CodiceFinito,DataInizio,OraInizio,[Data fine],[Ora fine]"
            Set rsFasi = Db.OpenRecordset(Sql)
            While rsFasi.EOF = False
                SecProd = 0
                
                DataIN = rsFasi.Fields("DataInizio")
                DataFI = rsFasi.Fields("Data fine")
                InizioFASE = rsFasi.Fields("OraInizio")
                FineFASE = rsFasi.Fields("Ora fine")
                'Fase = rsFasi.Fields("Fase")
                'MsgBox DataIN & " " & InizioFASE, , DataFI & " " & FineFASE
                
                CodFin = rsFasi.Fields("CodiceFinito")
                Pos = InStr(CodFin, "*")
                If Pos > 0 Then CodFin = Left(CodFin, Pos - 1)
                
                NumL = 0
                IdRepP = 0
                rsLis.FindFirst "Codice='" & CodFin & "'"
                If rsLis.NoMatch = False Then
                    NumL = rsLis.Fields("Linea")
                    If IsNull(rsLis.Fields("IdRep")) = False Then IdRepP = rsLis.Fields("IdRep")
                Else
                    'preparazioni interne
                    'If UCase(CodFin) = "PREPARAZIONE" And T = 1 Then
                    '    CodCom = rsFasi.Fields("CodCommessa")
                    '    rsCC.FindFirst "CodCommessa=" & CodCom
                    '    If rsCC.NoMatch = False Then
                    '        CodFin = rsCC.Fields("CodiceFinito")
                    '        rsLis.FindFirst "Codice='" & CodFin & "'"
                    '        If rsLis.NoMatch = False Then
                    '            NumL = rsLis.Fields("Linea")
                    '            IdRepP = rsLis.Fields("IdRep")
                    '        End If
                    '    End If
                    'End If
                End If
                            
                If DataIN = DataFI Then
                    InizioINT = Maggiore(oraEnt, InizioFASE)
                    FineINT = Minore(OraUsc, FineFASE)
                    Sec = DateDiff("s", InizioINT, FineINT)
                    If Sec > 0 Then SecProd = SecProd + Sec
                End If
                If DataIN = DataCA And DataFI <> DataCA Then
                    InizioINT = Maggiore(oraEnt, InizioFASE)
                    FineINT = Maggiore(OraUsc, InizioFASE)
                    Sec = DateDiff("s", InizioINT, FineINT)
                    If Sec > 0 Then SecProd = SecProd + Sec
                End If
                If DataIN <> DataCA And DataFI = DataCA Then
                    InizioINT = Minore(oraEnt, FineFASE)
                    FineINT = Minore(OraUsc, FineFASE)
                    Sec = DateDiff("s", InizioINT, FineINT)
                    If Sec > 0 Then SecProd = SecProd + Sec
                End If
                rsFasi.MoveNext
                'MsgBox SecProd, , oraEnt
                
                'Inserimento dati in tabella Riepilogo_oreProd
                Sql = "SELECT Id FROM Riepilogo_oreProd WHERE Valid=0"
                Set rsRiep = Db.OpenRecordset(Sql)
                If rsRiep.RecordCount > 0 Then
                    Id = rsRiep.Fields("Id")
                    Sql = "UPDATE Riepilogo_oreProd SET Valid=1," _
                         & "CodDipendente='" & CodDip2 & "'," _
                         & "CodiceFinito='" & CodFin & "'," _
                         & "Data=#" & DataCart & "#," _
                         & "TotSecProd=" & SecProd & "," _
                         & "Linea=" & NumL & "," _
                         & "IdRep=" & IdRepP & " " _
                         & "WHERE Id=" & Id
                    'Sql = "UPDATE Riepilogo_oreProd SET Valid=1," _
                    '     & "CodDipendente='" & CodDip2 & "'," _
                    '     & "CodiceFinito='" & CodFin & "'," _
                    '     & "Fase='" & Fase & "'," _
                    '     & "Data=#" & DataCart & "#," _
                    '     & "TotSecProd=" & SecProd & "," _
                    '     & "Linea=" & NumL & "," _
                    '     & "IdRep=" & IdRepP & " " _
                    '     & "WHERE Id=" & Id
                Else
                    Sql = "INSERT INTO Riepilogo_oreProd " _
                        & "(Valid,CodDipendente,CodiceFinito,Data,TotSecProd,Linea,IdRep) " _
                        & "VALUES (1,'" & CodDip2 & "','" & CodFin & "',#" & DataCart & "#" _
                        & "," & SecProd & "," & NumL & "," & IdRepP & ")"
                    'Sql = "INSERT INTO Riepilogo_oreProd " _
                    '    & "(Valid,CodDipendente,Fase,CodiceFinito,Data,TotSecProd,Linea,IdRep) " _
                    '    & "VALUES (1,'" & CodDip2 & "','" & CodFin & "','" & Fase & "',#" & DataCart & "#" _
                    '    & "," & SecProd & "," & NumL & "," & IdRepP & ")"
                End If
                Db.Execute (Sql)
                Set rsRiep = Nothing
            Wend
        Next T
        'considera anche Fasi ancora aperte
        Sql = "SELECT CodiceFinito,DataInizio,OraInizio FROM Fasi " _
            & "WHERE DataInizio=#" & DataCart & "# " _
            & "AND DataInizio IS NOT NULL " _
            & "AND CodDipendente='" & CodDip2 & "' " _
            & "AND Chiusa IS NULL" 'aggiunto in vers. 5.00.48 (corretto in 5.00.54) (prima c'era Chiusa<>'CHIUSA')
        Set rsFasi = Db.OpenRecordset(Sql)
        While rsFasi.EOF = False
            DataIN = rsFasi.Fields("DataInizio")
            InizioFASE = rsFasi.Fields("OraInizio")
            InizioINT = Maggiore(oraEnt, InizioFASE)
            FineINT = Maggiore(OraUsc, InizioFASE)
            
            Sec = DateDiff("s", InizioINT, FineINT)
            If Sec > 0 Then
                CodFin = rsFasi.Fields("CodiceFinito")
                Pos = InStr(CodFin, "*")
                If Pos > 0 Then CodFin = Left(CodFin, Pos - 1)

                NumL = 0
                IdRepP = 0
                rsLis.FindFirst "Codice='" & CodFin & "'"
                If rsLis.NoMatch = False Then
                    NumL = rsLis.Fields("Linea")
                    If IsNull(rsLis.Fields("IdRep")) = False Then IdRepP = rsLis.Fields("IdRep")
                End If
                
                'Inserimento dati in tabella Riepilogo_oreProd
                Sql = "SELECT Id FROM Riepilogo_oreProd WHERE Valid=0"
                Set rsRiep = Db.OpenRecordset(Sql)
                If rsRiep.RecordCount > 0 Then
                    Id = rsRiep.Fields("Id")
                    Sql = "UPDATE Riepilogo_oreProd SET Valid=1," _
                        & "CodDipendente='" & CodDip2 & "'," _
                        & "CodiceFinito='" & CodFin & "'," _
                        & "Data=#" & DataCart & "#," _
                        & "TotSecProd=" & Sec & "," _
                        & "Linea=" & NumL & "," _
                        & "IdRep=" & IdRepP & " " _
                        & "WHERE Id=" & Id
                Else
                    Sql = "INSERT INTO Riepilogo_oreProd " _
                        & "(Valid,CodDipendente,CodiceFinito,Data,TotSecProd,Linea,IdRep) " _
                        & "VALUES (1,'" & CodDip2 & "','" & CodFin & "',#" & DataCart & "#" _
                        & "," & Sec & "," & NumL & "," & IdRepP & ")"
                End If
                Db.Execute (Sql)
                Set rsRiep = Nothing
            End If
            
            rsFasi.MoveNext
        Wend
        
        PBar1 = PBar1 + 1
        DoEvents
        rsCar.MoveNext
    Wend
    PBar1.Visible = False
    Set rsLis = Nothing
    'Set rsCC = Nothing
    
'GoTo salto:
    
    'giorni senza aperture/chiusure fasi (ver.5.00.54)
    Sql = "SELECT CodDipendente,Data,SUM(TotSecTimbr),IdRep FROM Riepilogo_oreCart R " _
        & "WHERE Valid=1 " _
        & "AND CodDipendente NOT IN " _
        & "(SELECT CodDipendente FROM Riepilogo_oreProd P " _
        & " WHERE Valid=1 AND P.Data=R.Data) " _
        & "GROUP BY CodDipendente,Data,IdRep " _
        & "ORDER BY CodDipendente,Data,IdRep"
    Set rsRiep = Db.OpenRecordset(Sql)
    'MsgBox rsRiep.RecordCount
    While rsRiep.EOF = False
        CodDip2 = rsRiep.Fields("CodDipendente")
        DataB = rsRiep.Fields("Data")
        strDataB = Format(DataB, "yyyy/mm/dd")
        Sec = rsRiep.Fields(2) 'timbrature
        SecProd = Sec 'ore produzione = ore timbrature
        idRep = rsRiep.Fields("IdRep")
        
        'cerca fasi aperte prima di dataB e chiuse dopo dataB
        Esiste = False
        For T = 1 To 2
            Sql = "SELECT Fase,DataInizio,[Data fine] "
            If T = 1 Then Sql = Sql & "FROM CommesseChiuse_Fasi WHERE "
            If T = 2 Then Sql = Sql & "FROM Fasi WHERE "
            Sql = Sql & "CodDipendente='" & CodDip2 & "' " _
                      & "AND Fase<>'AVVIO LINEA' AND Chiusa='CHIUSA' " _
                      & "AND DataInizio<#" & strDataB & "# " _
                      & "AND [Data fine]>#" & strDataB & "# " _
                      & "ORDER BY DataInizio"
            Set rsFasi = Db.OpenRecordset(Sql)
            While rsFasi.EOF = False
                If rsFasi.RecordCount > 0 Then Esiste = True
                rsFasi.MoveNext
            Wend
            Set rsFasi = Nothing
        Next T
        
        'cerca fasi ancora APERTE prima di dataB (vers. 5.00.54)
        Sql = "SELECT Fase,DataInizio,[Data fine] FROM Fasi " _
            & " WHERE CodDipendente='" & CodDip2 & "' " _
            & "AND Fase<>'AVVIO LINEA' AND Chiusa IS NULL " _
            & "AND DataInizio<#" & strDataB & "# " _
            & "ORDER BY DataInizio"
        Set rsFasi = Db.OpenRecordset(Sql)
        While rsFasi.EOF = False
            If rsFasi.RecordCount > 0 Then Esiste = True
            rsFasi.MoveNext
        Wend
        Set rsFasi = Nothing
        
        'Inserimento dati in tabella Riepilogo_oreProd
        If Esiste Then
            Sql = "INSERT INTO Riepilogo_oreProd " _
                & "(Valid,CodDipendente,Data,TotSecProd,Linea,IdRep) " _
                & "VALUES (1,'" & CodDip2 & "',#" & strDataB & "#" _
                & "," & SecProd & ",0," & idRep & ")"
            Db.Execute (Sql)
        End If
        
        rsRiep.MoveNext
    Wend
    Set rsRiep = Nothing
    
'salto:
    
    'Carica i dati nella FgridRep
    TotSec = 0
    For I = 1 To FgridRep.Rows - 1
        idRep = Val(FgridRep.TextMatrix(I, 1))
        
        'ore timbrature
        Sql = "SELECT SUM(TotSecTimbr) FROM Riepilogo_oreCart " _
            & "WHERE Valid=1 AND IdRep=" & idRep
        Set rsRiep = Db.OpenRecordset(Sql)
            Sec = 0
            If IsNull(rsRiep.Fields(0)) = False Then Sec = rsRiep.Fields(0)
            TotSec = TotSec + Sec
            Ore = secToOre2(Sec)
            If Ore = "00:00:00" Then Ore = "0"
            FgridRep.TextMatrix(I, 3) = Ore
        Set rsRiep = Nothing
        
        'ore effettive
        Sql = "SELECT SUM(TotSecEff) FROM Riepilogo_oreCart " _
            & "WHERE Valid=1 AND IdRep=" & idRep
        Set rsRiep = Db.OpenRecordset(Sql)
            Sec = 0
            If IsNull(rsRiep.Fields(0)) = False Then Sec = rsRiep.Fields(0)
            totSecEff = totSecEff + Sec
            Ore = secToOre2(Sec)
            If Ore = "00:00:00" Then Ore = "0"
            FgridRep.TextMatrix(I, 4) = Ore
        Set rsRiep = Nothing
        
        'ore produzione
        Sql = "SELECT SUM(TotSecProd) FROM Riepilogo_oreProd " _
            & "WHERE Valid=1 AND IdRep=" & idRep
        Set rsRiep = Db.OpenRecordset(Sql)
            SecProd = 0
            If IsNull(rsRiep.Fields(0)) = False Then SecProd = rsRiep.Fields(0)
            totSecProd = totSecProd + SecProd
            Ore = secToOre2(SecProd)
            If Ore = "00:00:00" Then Ore = "0"
            FgridRep.TextMatrix(I, 5) = Ore
        Set rsRiep = Nothing
    Next I
    txtOre2 = secToOre2(TotSec)
    txtOreEff2 = secToOre2(totSecEff)
    txtOreProd2 = secToOre2(totSecProd)
    
    OraFineElab = Now
    'MsgBox secToOre2(DateDiff("s", OraInizioElab, OraFineElab)), , "Tempo elaborazione"
    
    BtnStop.Visible = False
    chkEscludiVisit.Visible = True
    chkSoloVisit.Visible = True
    
    cmdEsci.Enabled = True
    BtnAggiorna.Enabled = True
    gridDip.Enabled = True
    dtAl.Enabled = True
    DTda.Enabled = True
End Sub