Den korrekte syntaks for at tilføje en NY post til din tabel bør være
Dim SqlQuery As String = "INSERT INTO presence(id_presence,id,hours,date) " & _
"VALUES (@Id_presence,@Id,@Hours,@Date)"
Og selvfølgelig skal hver kommando udføres, ellers er det bare en ubrugelig kodelinje.
Du mangler denne linje efter oprettelsen af parametrene.
SQLcmd.ExecuteNonQuery()
Fra dit billede er det ikke muligt at være sikker, men hvis idpresence er et AUTOINCREMENT-felt, så skal du ikke prøve at indstille dets værdi med din kommando og parameter, men lade databasen gøre det for dig. (Duplikatnøgleproblemer kan opstå, hvis mere end én bruger indsætter poster på samme tid)
Som en sidste ting er dine parametres type ikke specificeret, så de matcher ikke det underliggende datatabelskema. Du kan bruge AddWithValue og konvertere input-tekstboksens værdier til den korrekte databasetype
SQLcmd.Parameters.AddWithValue("@Id_presence", Convert.ToInt32(TextBox1.Text))
SQLcmd.Parameters.AddWithValue("@Id", Convert.ToInt32(TextBox2.Text))
SQLcmd.Parameters.AddWithValue("@Hours", Convert.ToInt32(TextBox3.Text))
SQLcmd.Parameters.AddWithValue("@Date", Convert.ToDateTime(TextBox4.Text))