【问题标题】:Datatable select greater than date数据表选择大于日期
【发布时间】:2024-01-20 16:34:01
【问题描述】:

我已经用 MySQL 数据填充了一个数据表,我需要从数据表中检索所有记录,其中“unitassign”为 DBNull 并且“putime”(MySQL 日期时间格式)大于或等于今天的日期(即使时间已经过去)并且“putime”(相同变量)小于或等于 vbdatetime 变量“eighthr”(这将基于关闭日期和时间进行匹配)

Dim eighthr As DateTime
If (DateTime.Now.AddHours(8).ToString("yyyy-MM-dd") = Date.Now.ToString("yyyy-MM-dd")) Then
    eighthr = CDate(DateTime.Now.ToString("yyyy-MM-dd"))
Else
    eighthr = DateTime.Now.AddHours(8)
End If
resultstr = "unitassign is Null AND (putime >= #" & SchedulerControl1.Start.ToString("yyyy-MM-dd") & "# AND putime <= #" & eighthr & "#)"

Dim result() As DataRow = jboardtable.Select(resultstr)

这没有返回任何结果,尽管我的数据表中确实有应该出现的行

【问题讨论】:

  • eighthr 看起来像一个字符串或日期。下定决心。尝试使用Option Strict On
  • 那么问题是什么?
  • 语法运行不正确。 LarsTech - 我现在正在尝试查看它
  • option strict on 并且分析器建议在 else 之前添加一个 Cdate(如图所示)没有其他错误 - 我的问题仍然没有改变
  • 您说的是“MySQL 格式”,但重要的是您要了解DataTable.Select() 始终是 dotNet 格式,无论您的数据库如何。

标签: vb.net datatable


【解决方案1】:

试试:

Dim eighthr As DateTime
If DateTime.Now.TimeOfDay.TotalHours < 16 Then
    eighthr = DateTime.Now.Date
Else
    eighthr = DateTime.Now.Date.AddDays(1)
End If
resultstr = "unitassign is Null AND (putime >= #" & SchedulerControl1.Start.ToString("yyyy-MM-dd") & "# AND putime <= #" & eighthr & "#)"
Dim result() As DataRow = jboardtable.Select(resultstr)

【讨论】:

  • 这不起作用 - 似乎与我上面的错误代码完全相同
  • 我刚刚修复了由自动更正导致的 resultstr 中的“错字”。另外,SchedulerControl1.Start 是否小于今天的日期?