Nicht tun
param.Value = dt.ToShortDateString();
einfach verlassen
param.Value = dt;
Sie versuchen, einen String in das DateTime-Feld einzufügen - PostgreSQL wird sich sicher beschweren.
Verwenden Sie NpgsqlTypes.NpgsqlDbType.Timestamp, wenn Sie vermeiden möchten, dass die Zeitinformationen verloren gehen