【问题标题】:How to fetch data from SQL Server using VB.Net DateTimePicker如何使用 VB.Net DateTimePicker 从 SQL Server 获取数据
【发布时间】:2021-03-02 16:55:31
【问题描述】:

我的项目面临挑战。

我需要检索设定日期和时间之间的销售交易。例如(从 2021 年 1 月 3 日下午 2:00 到 2021 年 2 月 3 日上午 8:00)。

这是一个带有 SQl Server 2012 的 VB.net 2015。

日期由 Datetime Picker 工具提供,关联的 SQL 列类型为“Datetime”(2021-03-02 16:27:33.233)。

这是我尝试过的:

Dim tbls As New DataTable()
' cmd = New SqlCommand("Select * from RECEIPTS  WHERE Time BETWEEN @dafrom AND @dato ORDER BY 'Receipt_No'", con)
cmd = New SqlCommand("Select * from RECEIPTS WHERE Date Between @Stim And @Etim ORDER BY 'Receipt_No'", con)
      
cmd.Parameters.Add("@Stim", SqlDbType.DateTime).Value = Datefrom.Value
cmd.Parameters.Add("@Etim", SqlDbType.DateTime).Value = DateTo.Value

Dim adapter As New SqlDataAdapter(cmd)
adapter.Fill(tbls)

我启用了 DateTimePicker 中的时间部分以允许我设置时间,但我的查询仅返回基于 Date 部分的行而不返回时间。

【问题讨论】:

  • “但是我的查询只返回基于日期部分的行,而不是与设置时间一起返回”我不明白你的意思。
  • 您是否设置了一个 vrak 点以查看将哪些值传递给您的参数等?
  • "但是我的查询只返回基于 Date 部分的行,没有时间。" 你能在你的数据库中提供一些记录吗?
  • 感谢您的回复,我的意思是当我设置日期和时间时,根据我设置的日期返回行并且时间不受影响。
  • (抱歉-应该说'break' point)。

标签: sql-server vb.net visual-studio datetime datetimepicker


【解决方案1】:

完全猜测,但我猜测您所说的是缺少最后日期的数据。例如,如果您为输入参数选择2021-01-012021-01-31,则不会返回值为2021-01-31T17:00:00 的行。

原因很简单,因为2021-01-31T17:00:00 不是 BETWEEN 的值是2021-01-012021-01-31;因为2021-01-31 实际上是2021-01-31T00:00:00

在处理日期和时间值时,最好使用带有>=< 的日期显式日期边界。这意味着您的查询应该如下:

cmd = New SqlCommand("SELECT {Explicitly define your columns} FROM dbo.RECEIPTS WHERE [Date] >= @Stim AND [Date] < DATEADD(DAY,1,@Etim) ORDER BY Receipt_No;", con)

我也更改了ORDER BY 'Receipt_No',因为它没有意义;它还不如阅读ORDER BY 'What ever you like SQL Server. Any arbitrary value will do.'。列名不使用单引号 (');单引号用于文字字符串。 T-SQL 中对象的定界标识符是方括号([]),但它也支持 ANSI-SQL 的双引号(")。

【讨论】:

  • 不,我得到了所有数据,但仅在日期部分,datagridview 上返回的行基于日期,不包括时间。谢谢
【解决方案2】:

因为我只需要控件的时间部分来过滤我的事务表。

为了从 DateTime 中提取时间,您可以使用

yourDateTime.ToString("HH:mm:ss")

或者

yourDateTime.ToShortTimeString()

例如,

Dim d = New DateTime(2021, 3, 2, 16, 27, 33)
Dim time = d.ToString("HH:mm:ss")  ' 16:27:33
Dim tm = d.ToShortTimeString()     ' 4:27 PM

【讨论】:

  • 数据类型为日期时间,
  • @Fayemioladele 测试基于 DataTime 数据类型。如果您需要进一步的帮助,请告诉我。
【解决方案3】:

谢谢,Evryone,我终于找到了我的问题的解决方案。

我意识到 datetimepicker 同时发送日期和时间,而且我在 SQL Db 中使用 datetime 类型,所以我只使用 2 个 Datattime 选择器(即从日期到日期的日期)并将格式属性更改为自定义。然后我将它设置为 (MM/dd/yyyy hh:mm:ss tt) 我的问题就解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2012-07-14
    相关资源
    最近更新 更多