Gör inte
param.Value = dt.ToShortDateString();
lämna bara
param.Value = dt;
Du försöker infoga en sträng i DateTime-fältet - säkerligen kommer PostgreSQL att klaga.
använd NpgsqlTypes.NpgsqlDbType.Timestamp om du vill undvika att förlora tidsinformationen