Don't do that!
SqlDataAdapter dad = new SqlDataAdapter("Select * from esrdat where esrdat_date between '" + Convert.ToDateTime(dateTimePicker1.Value) + "' and '" + Convert.ToDateTime(dateTimePicker2.Value) + "'", con);
All it does is take a valid DateTime, use a default conversion to a string, then try to convert it back to a DateTime. Then pass that (as a number, converted back to a string via another default conversion) to SQL. But in your local format, rather than anythign SQL is expecting, which is ISO format.
Try:
SqlDataAdapter dad = new SqlDataAdapter("Select * from esrdat where esrdat_date between @START AND @END", con);
dad.SelectCommand.Parameters.AddWithValue("@START", dateTimePicker1.Value);
dad.SelectCommand.Parameters.AddWithValue("@END", dateTimePicker2.Value);