Die korrekte Syntax zum Hinzufügen eines NEUEN Datensatzes zu Ihrer Tabelle sollte
sein Dim SqlQuery As String = "INSERT INTO presence(id_presence,id,hours,date) " & _
"VALUES (@Id_presence,@Id,@Hours,@Date)"
Und natürlich sollte jeder Befehl ausgeführt werden, sonst sind es nur nutzlose Codezeilen.
Diese Zeile fehlt Ihnen nach der Erstellung der Parameter.
SQLcmd.ExecuteNonQuery()
Von Ihrem Bild aus ist es sicher nicht möglich, aber wenn die idpresence ein AUTOINCREMENT-Feld ist, sollten Sie nicht versuchen, seinen Wert mit Ihrem Befehl und Parameter festzulegen, sondern die Datenbank dies für Sie tun lassen. (Probleme mit doppelten Schlüsseln können auftreten, wenn mehr als ein Benutzer gleichzeitig Datensätze einfügt)
Als letztes wird der Typ Ihrer Parameter nicht angegeben, sodass sie nicht mit dem zugrunde liegenden Datentabellenschema übereinstimmen. Sie könnten AddWithValue verwenden und die eingegebenen Textfeldwerte in den richtigen Datenbanktyp umwandeln
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))