dtpDOBFrom.Value
- это DateTime, который вы пытаетесь вставить в строку.Таким образом, DateTime преобразуется в строку, но формат, кажется, отличается от формата, который ожидает Access.Вы можете поиграть с параметрами DateTime.ToString
(и заключить дату в #
вместо '
, поскольку это то, чего хочет Access), но это будет , а не , будет правильным способом сделать это.
Правильный путь, позволяющий избежать подобных проблем приведения типов в целом (и, среди прочего, внедрения SQL), состоит в использовании параметров :
В вашем случаеэто будет выглядеть примерно так (не проверено):
cmdSearch.CommandText = "SELECT [First Name], [Surname], [Contact Type], [Birthdate] FROM [Contacts] WHERE [Birthdate] >= ? AND [Birthdate] <= ?";
cmdSearch.Parameters.AddWithValue("DOBFrom", dtpDOBFrom.Value);
cmdSearch.Parameters.AddWithValue("DOBTo", dtpDOBTo.Value);
С OLEDB (который используется для доступа к базе данных MS Access), имя параметров ("DOBFrom") не важно, но порядок вкоторые вы добавляете, должны соответствовать порядку вопросительных знаков в SQL.