Simple: it isn't a valid date.
It may be to you, and your user - but SQL runs on a different computer and doesn't have access to your users preferences. Instead of passing everything to SQL as a string, use the various TryParse methods to convert them to native types (using the user settings to get it right) and pass the converted value directly to SQL.
DateTime datEntry;
it (!DateTime.TryParse(EntryDate, out datEntry))
{
... report format / value problem to user ...
return;
}
...
cmd.Parameters.AddWithValue("@date2", datEntry);