Несоответствие типов данных при передаче DateTimePicker.Value

Я так сильно боролся с чем-то, что в конце концов нашел, как исправить, но я не знаю первопричины. Если я добавляю DateTimePicker (в данном случае dtRecordBatchDate) в форму, а пользователь не меняет дату и время по умолчанию, и я передаю его DateTimePicker.Value команде SQL, используя свойство Parameters, я получаю эту ошибку:

using (OleDbCommand command = new OleDbCommand("INSERT INTO Herbs_Stock (herb_id,batch_number,batch_date,quantity,cost,shipcost) VALUES (?,?,?,?,?,?)", Program.myconnection))
{
     command.Parameters.AddWithValue("@herb_id", herb_id);
     command.Parameters.AddWithValue("@batchnumber", batch_number);

     command.Parameters.AddWithValue("@batch_date", dtRecordBatchDate.Value); // HERE'S THE IMPORTANT PART

     command.Parameters.AddWithValue("@quantity", quantity);
     command.Parameters.AddWithValue("@cost", cost);
     command.Parameters.AddWithValue("@shipcost", shipcost);
     command.ExecuteNonQuery();
}

Несоответствие типов данных в выражении критериев

Но если я добавлю только одну строку перед переходом к команде, она будет исправлена: dtRecordBatchDate.Value=DateTime.Today.

Почему так? Это странно, потому что тип DateTimePicker.Value - это DateTime, а не DateTime?, и для него уже установлено значение по умолчанию DateTime.Now (или за несколько секунд до этого :)). Мне это очень любопытно.


person Ehsan88    schedule 28.11.2013    source источник
comment
Какой у вас тип batch_date столбца? Какое значение dtRecordBatchDate.Value.Date, когда вы смотрите в отладчике? Почему бы вам не использовать вместо этого просто dtRecordBatchDate.Value?   -  person Soner Gönül    schedule 28.11.2013
comment
Я смотрел на все это! они все в порядке. Столбец имеет тип DateTime, а также dtRecordBatchDate.Value и dtRecordBatchDate.Value.Date. Думаю, проблема сложнее и, возможно, это ошибка.   -  person Ehsan88    schedule 28.11.2013