#asp.net #vb.net
#asp.net #vb.net
Вопрос:
Мы хотели бы сравнить дату из базы данных с текущей датой.
Вот что я пробовал до сих пор:
'Obtain current date
Dim curdate As String = Now.ToString("yyyy")
'Now compare curdate with date from db called eventdate. Event date is of dateTime datatype.
If drv("eventdate").ToString = "" And Year(drv("eventdate").ToString) = curdate Then
'Then do some processing
End if
Когда я запускаю этот код, я получаю следующую ошибку:
Преобразование из строки «» в тип «Дата» недопустимо.
Пожалуйста, помогите!
Большое вам спасибо, эксперты.
Ответ №1:
If Today.CompareTo(CDate(drv("eventdate")).Date) = 0 Then
'Do something
End If
Я делаю предположение здесь, что вас интересует только день, а не время. В противном случае вероятность совпадения в течение данного дня составляла бы примерно 1 к 2,5 миллионам.
На основе комментария:
If Today.Year.CompareTo(CDate(drv("eventdate")).Year) = 0 Then
'Do something
End If
или
If Today.Year = CDate(drv("eventdate")).Year Then
'Do something
End if
И еще одна вещь: действительно похоже, что это проверка, которая должна выполняться вашей базой данных. Сделайте это частью запроса, который возвращает результаты. Это будет намного быстрее, и это то, к чему относится такая проверка. Все, что вам нужно, это добавить проверку в ваше предложение where следующим образом:
Year(eventdate) = Year(current_timestamp)
Комментарии:
1. спасибо, Джоэл, за твой любезный ответ. Мы просто хотим, чтобы год был похож на 2011. Мы в основном пытаемся скрыть данные за предыдущие годы. Итак, в нашей текущей ситуации мы не хотим отображать какие-либо данные за 2010 год. если дата события пуста или дата события = ‘2010’, тогда отобразите одну вещь. В противном случае (год — текущий год, покажите что-нибудь еще.
2. Еще раз спасибо, Джоэл. Я перепробовал все ваши решения, и каждое из них выдает мне эту ошибку, которая похожа на то, что я получал: преобразование из типа ‘DBNull’ в тип ‘Date’ недопустимо. Я знаю, что в БД нет пустых данных.
3. Проверьте еще раз. Если он пытается преобразовать из DBNull, у вас может не быть пустых значений в вашей таблице, но они обязательно есть в результатах вашего запроса. Легко написать запрос, который бы это сделал.
Ответ №2:
Если drv
есть экземпляр DataReader, проверьте DBNull
.
IF Not drv.IsDBNull(column_index_of_eventdate) Then
...
If drv.GetDateTime(column_index).Year=Date.Now.Year Then
...
End If
End If
Комментарии:
1. Спасибо, AVD. Отличная идея о проверке DBNull, но я не использую экземпляр DataReader. Любые другие идеи. Пожалуйста, также ознакомьтесь с моим ответом на предложенные решения Джоэла.
2. @ChidiOkeh Каков тип данных EventDate? Используйте IsNothing для проверки значения null. ЕСЛИ Not IsNothing(drv(«colName»)), то …
3. Тип данных — datetime . Сейчас я собираюсь протестировать. Я сообщу об этом в ближайшее время. Спасибо.
4. Никакой любви. Я, честно говоря, думал, что это будет просто.
Ответ №3:
Я полагаю, что у вас либо нулевое, либо пустое значение, также ваше сравнение неверно, попробуйте:
If drv("eventdate").ToString <> "" Andalso Year(drv("eventdate").ToString) = curdate Then
'Then do some processing
End if
Комментарии:
1. спасибо Jmoreno. очень сожалею о позднем ответе на это. Я не получил ответа по электронной почте. Я вижу это только сейчас, когда вернулся за дополнительным вопросом.
2. @ChidiOkeh, нет проблем. Кстати, DBNull. Значение. toString возвращает пустую строку, поэтому я использовал это вместо прямой проверки на null (не уверен, что было в вашей таблице), обычно вы хотели бы просто проверить на null .