Ne faites pas
param.Value = dt.ToShortDateString();
laisse juste
param.Value = dt;
Vous essayez d'insérer une chaîne dans le champ DateTime - PostgreSQL va sûrement se plaindre.
utilisez NpgsqlTypes.NpgsqlDbType.Timestamp si vous voulez éviter de perdre les informations de temps