Поиск в наборе данных (дата) для указания c пользовательской даты. Vb.net - PullRequest
0 голосов
/ 28 марта 2020

У меня небольшая проблема уже два дня.

У меня есть выпадающий список (это месяц как пример целого числа 3), текстовое поле (это год как пример 2020) и день, который я выбираю из кода .

Это мой код:

Dim result() As DataRow
 Dim CurrentMonthDays As Int16 = DateTime.DaysInMonth(CInt(textBoxYear.Text), comboBoxMonth.Text))
 Dim rIndex As Int32

       For d As Integer = 1 To CurrentMonthDays                     
  Dim Date As New Date(textBoxYear.Text, CInt(comboBoxMonth.Text), d)


   result = DataSet.Tables("Thetable").Select("Name= '" & name & "'" &
                                             "AND " & "Date = '" & Date & "'")

                    For Each dr As DataRow In result
                        rIndex = dr.Table.Rows.IndexOf(dr)
                    Next dr

                    If (result.Length > 0) Then
                        do something                 
                    Else
                       do nothing                  
                    End If

                Next d

Я пытаюсь использовать много опций, но некоторые исключения броска не являются допустимой датой или не распознаются как строка et c Опции, которые не имеют исключение и работа ОК в моем P C (код P C, который я создаю), не работающем в другом, выдает операцию «Не удается выполнить =» для System.DateTime и System.String ».

Я изменяю "'" на "#" и c не работает, я пытаюсь преобразовать дату в строку или строку в дату, и проблема заключается в повороте.

Как я вижу В базе данных хранится дата как 1 марта 2020 года, я добавляю записи как 1/3/2020. Я думаю, что это не имеет значения, но ...

У меня есть приложение, работающее с

Dim GreekCulture As CultureInfo = New CultureInfo("el-GR")

Я пытаюсь преобразовать его перед поиском инвариантной культуры, но ничего не меняется.

Последнее, что я сделал, это:

 Dim Date As DateTime = DateTime.ParseExact(d & "-" & comboBoxMonth.Text & "-" & textBoxYear.Text, "d-M-yyyy", New DateTimeFormatInfo)


 result = DataSet.Tables("TheTable").Select("Name= '" & Name & "'" & "AND " & "Date = #" & Date & "#")

Исключение типа «Строка не была распознана как допустимое значение даты / времени».

Как преобразовать дату из строки в дату, которую выберите Команда принимает или как я могу перефразировать команду выбора, чтобы работать на даты?

Надеюсь, это не смущает, и любая помощь будет оценена, большое спасибо.

1 Ответ

1 голос
/ 28 марта 2020

Я думаю, что для этого может быть проще использовать LINQ. Например:

Dim n = "John";
Dim d = new DateTime(2020, 3, 1)

Dim rows = datatable.AsQueryable().Where(Function(ro) DirectCast(ro("date"), DateTime) = d AndAlso DirectCast(ro("name"), String) )

Если вы используете строго типизированные таблицы данных, этот код будет гораздо менее запутанным:

dataTable.AsQueryable().Where(Function(ro) ro.Date = d AndAlso ro.Name = n) 

Если вы хотите использовать дату и время в выражении Select, вам следует обернуть поставьте дату в # и отформатируйте ее в соответствии с инвариантной культурой

Dim selStr = $"[Name] = '{n}' and [Date] = #{d.ToString(CultureInfo.InvariantCulture)}#"
Dim rows = datatable.Select(selStr)

Я бы не рекомендовал ее, поскольку она основывается на поездке туда и обратно от даты d до строки, а затем обратно к дате, но Также обратите внимание, что использование строковой интерполяции значительно очистило код!


В качестве заключительного замечания, попробуйте не использовать такие базовые имена столбцов c, как «date» и «name», потому что такие имена, как это часто конфликтуют с базой данных или. net именами типов (именами классов), что означает, что они должны быть экранированы или заключены в кавычки

...