Несоответствие типов данных при извлечении записей из базы данных доступа с использованием DateTimePicker - PullRequest
1 голос
/ 23 марта 2010

Я получаю ошибку выражения критерия несоответствия типов данных при попытке извлечь записи из базы данных доступа между двумя датами, используя DateTimePicker в C #.

Это оператор Select

else if (dtpDOBFrom.Value < dtpDOBTo.Value)
{
    cmdSearch.CommandText = "SELECT [First Name], [Surname], [Contact Type], [Birthdate] FROM [Contacts] WHERE [Birthdate] >= '" + dtpDOBFrom.Value +"' AND [Birthdate] <= '" + dtpDOBTo.Value +"'";
}

1 Ответ

1 голос
/ 23 марта 2010

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.

...