Den korrekta syntaxen för att lägga till en NY post i din tabell bör vara
Dim SqlQuery As String = "INSERT INTO presence(id_presence,id,hours,date) " & _
"VALUES (@Id_presence,@Id,@Hours,@Date)"
Och naturligtvis bör varje kommando köras annars är det bara en användbar kodrad.
Du saknar den här raden efter att parametrarna skapats.
SQLcmd.ExecuteNonQuery()
Från din bild är det inte möjligt att vara säker, men om idpresence är ett AUTOINCREMENT-fält, bör du inte försöka ställa in dess värde med ditt kommando och parameter utan låta databasen göra det åt dig. (Problem med dubbletter av nycklar kan uppstå om mer än en användare infogar poster samtidigt)
Som en sista sak anges inte dina parametrars typ så att de inte matchar det underliggande datatabellschemat. Du kan använda AddWithValue och konvertera inmatningstextrutans värden till rätt databastyp
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))