2016-05-22 2 views
0

Во втором For Each я хочу выбрать все записи с EmailCreateDate = dtEmailCreateDate, но запись не найдена. У кого-то есть идея?Datatable Select with Datetime

Dim dtEmailCreateDate As DateTime = Date.Now  
For Each row In _tblMandantenData.Select("Selected = True AND EmailSentDate IS NULL") 
    row("EmailCreateDate") = dtEmailCreateDate 
    DBAccess.UpdateEmailVersandInfos(row) 
Next 

Dim strQuery = String.Format("Selected = True AND EmailCreateDate = '{0}'", dtEmailCreateDate.ToString())  
For Each rowToSent In _tblMandantenData.Select(strQuery) 
    SentMail(rowToSent) 
Next 

ответ

1

Если посмотреть на Expression property of the DataColumn (правила изложены есть правила, которые используют для Select выражения фильтра) можно заметить, что фильтр на колонке DateTime создается ограждающих дату между символом номера (#)

DateTimeColumn = #value# 

Кроме того, дата должна быть отформатирована в соответствии с форматом ММ-дД-ГГГГ и, таким образом, ваш код должен проверить даты с этим выражением

Dim strQuery = String.Format("Selected = True AND " & _ 
       "EmailCreateDate = #{0}#", dtEmailCreateDate.ToString("MM-dd-yyyy"))  

конечно, это все еще может не сработать, если столбец с именем EmailCreateDate содержат s также информацию о времени и, следовательно, вы должны изменить свое форматирование, чтобы включить также вывод для времени «HH: mm: ss» или лучше использовать синтаксис BETWEEN

0

Мое предположение - проверьте, действительно ли значения присутствуют в БД. Если да, проверьте, действительно ли переданные значения соответствуют значениям, хранящимся в БД. Даже если разница в миллисекундах вы не получите данных.