我两天来遇到了一个小问题。
我有一个组合框(是整数示例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
我尝试了很多选项,但有些抛出的异常是无效日期或无法识别为字符串e.t.c在我的电脑(我创建代码的电脑(中没有异常且工作正常的选项在其他电脑中不工作,它抛出"无法对System.DateTime和System.String执行'='操作"。
我把"'"改为"#",ofc不起作用,我试图把日期转换成字符串或字符串转换成日期,问题是出现了转机。
当我看到数据库将日期存储为2020年3月1日时,我将记录添加为2020年1月3日。我认为这并不重要,但是。。。
我的申请工作与
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 & "#")
引发异常"字符串未被识别为有效的DateTime。">
如何将日期从字符串转换为select命令接受的日期或者如何重新表述select命令以适用于日期?
我希望不要混淆,任何帮助都会得到感谢,非常感谢。
我认为使用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到字符串,然后返回日期的往返行程,但也要注意,使用字符串插值已经大大清理了代码!
最后,请考虑避免使用"日期"one_answers"名称"等基本列名,因为这样的名称通常与数据库或.net类型名称(类名称(冲突,这意味着它们必须转义或引用