salve a tutti
data la seguente funzione (in basso)
sto ercando di aggiornare delle tabella mysql trasferendo dei dati da access
ho creato questa funzione che mi permette di modificare se un file esiste, e di inserirlo se non esiste
purtroppo è gia' una settimana che ci sbatto la testa in quanto nell'update mi da errore hce la data non è nel formato valido, e nell'insert mi inserisce sempre NULL a tutti i parametri ed ovviamente mi da errore per chiave duplicata al secondo insert

cosa sbaglio?
cisarebbe anche da controllare come fare a reperire quale è il campo chiave o contatore dellatabella infatti non me lo prende mai

codice:

    Public Function SincronizzaDb(ByVal DT As DataTable, ByVal DTMysql As DataTable, ByVal DataultimaSincrinizzazione As String, ByVal NomeTabella As String, 

ByVal conn1 As OleDbConnection, ByVal MysqlConn As MySqlConnection) As String
        ' Dim NomeTabella As String = DT.ToString
        Dim Col As Int16
        Dim i As Integer
        Dim strsqlInsert As String = " INSERT INTO " & NomeTabella & "  ("
        Dim StrsqlUpdate As String = " UPDATE " & NomeTabella & " SET "
        Dim StrValues As String = " VALUES ("
        Dim NomeColonna As String
        Dim IndiceAutoIncremet As Int16

        '----cerco il contatore (da modificare per multichiavi)-----------------
        'For Col = 0 To DT.Columns.Count - 1
        '     If DT.Columns(i).AutoIncrement = True Then
        '          IndiceAutoIncremet = i
        '       End If
        '    Next
        IndiceAutoIncremet = 1 'LO METTO AD UNO IN QUANTO devo cercare il modo di reperire il campo chiave





        '--------stringa sql INSERT------
        For Col = 0 To DT.Columns.Count - 1
            '   If Col <> IndiceAutoIncremet Then
            strsqlInsert = strsqlInsert & " " & DT.Columns(Col).Caption & ","
            StrValues = StrValues & "@" & DT.Columns(Col).ColumnName() & "," '?
            '  End If
        Next
        strsqlInsert = Mid(strsqlInsert, 1, Len(strsqlInsert) - 1) 'tolgo l'ultima virgola 
        StrValues = Mid(StrValues, 1, Len(StrValues) - 1)
        strsqlInsert = strsqlInsert & " )"
        strsqlInsert = strsqlInsert & StrValues & ")"


        '--------stringa sql UPDATE------
        For Col = 0 To DT.Columns.Count - 1
            If Col <> IndiceAutoIncremet Then
                StrsqlUpdate = StrsqlUpdate & " " & DT.Columns(Col).Caption & "=?,"
            End If
        Next
        StrsqlUpdate = Mid(StrsqlUpdate, 1, Len(StrsqlUpdate) - 1) 'tolgo l'ultima virgola 






        '--------parametri----------
        Dim CMDIns As New MySqlCommand(strsqlInsert, MysqlConn)
        Dim CMDUPd As New MySqlCommand(StrsqlUpdate, MysqlConn)

        For Col = 0 To DT.Columns.Count - 1
            NomeColonna = "?" ' DT.Columns(i).Caption
            ' Dim param As New OleDbParameter(DT.Columns(y).ColumnName(), GetOleDbType(DT.Columns(y).DataType()))
            CMDIns.Parameters.Add("@" & DT.Columns(Col).ColumnName(), GetOleDbType(DT.Columns(Col).DataType()))

            '---l'update non vuole il contatore------------------
            If Col <> IndiceAutoIncremet Then
                NomeColonna = "?" ' DT.Columns(i).Caption
                ' Dim param As New OleDbParameter(DT.Columns(y).ColumnName(), GetOleDbType(DT.Columns(y).DataType()))
                CMDUPd.Parameters.Add(NomeColonna, GetOleDbType(DT.Columns(Col).DataType()))
            End If
        Next




        '-------valori con insert DT----------

        For i = 0 To DT.Rows.Count - 1
            If RecordEsiste(DTMysql, DT.Rows(i)(IndiceAutoIncremet), DT.Columns(IndiceAutoIncremet).Caption) = True Then
                For Col = 0 To DT.Columns.Count - 1
                    If Col <> IndiceAutoIncremet Then
                        NomeColonna = DT.Columns(Col).Caption
                        CMDUPd.Parameters("?").Value = DT.Rows(i)(NomeColonna) 'NomeColonna
                    End If
                Next
                CMDUPd.CommandText = StrsqlUpdate & " WHERE " & DT.Columns(IndiceAutoIncremet).Caption & "=" & DT.Rows(i)(IndiceAutoIncremet)
                CMDUPd.ExecuteNonQuery()
            Else
                  For Col = 0 To DT.Columns.Count - 1
                       NomeColonna = DT.Columns(Col).ColumnName() 'DT.Columns(Col).Caption
                        CMDIns.Parameters("@" & NomeColonna).Value = DT.Rows(i)(NomeColonna)
                    Next
                     CMDIns.ExecuteNonQuery()
             
            End If
        Next

    End Function
    Private Function RecordEsiste(ByVal DT As DataTable, ByVal Codice As String, ByVal NomeCampo As String) As Boolean
        Dim i As Integer
        For i = 0 To DT.Rows.Count - 1
            If DT.Rows(i)(NomeCampo) = Codice Then
                Return True
            End If
        Next

        Return False
    End Function

    Private Function GetOleDbType(ByVal sysType As Type) As MySqlDbType
        If sysType Is GetType(String) Then
            Return MySqlDbType.VarChar
        ElseIf sysType Is GetType(Integer) Then
            Return MySqlDbType.Int16
        ElseIf sysType Is GetType(Boolean) Then
            Return MySqlDbType.Bit
        ElseIf sysType Is GetType(Date) Then
            Return MySqlDbType.Date
        ElseIf sysType Is GetType(Char) Then
            Return MySqlDbType.String
        ElseIf sysType Is GetType(Decimal) Then
            Return MySqlDbType.Decimal
        ElseIf sysType Is GetType(Double) Then
            Return MySqlDbType.Double
        ElseIf sysType Is GetType(Single) Then
            Return MySqlDbType.Int64
        ElseIf sysType Is GetType(Byte()) Then
            Return MySqlDbType.Byte
        ElseIf sysType Is GetType(Guid) Then
            Return MySqlDbType.VarChar
        End If
    End Function
grazie