如何使用VB从SQL Server中获取数据.净DateTimePicker



我的项目遇到了挑战。

我需要检索设定日期和时间之间的销售事务。(从2021年3月1日下午2点到2021年2月3日上午8点)。

这是一个VB.net 2015与SQl Server 2012。

日期是由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的时间部分,允许我设置时间,但是我的查询只返回基于日期部分的行,而不返回时间。

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

原因很简单,因为2021-01-31T17:00:00而不是BETWEEN2021-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的双引号(")。

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

为了从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

谢谢大家,我终于找到解决问题的办法了。

我意识到datetimepicker正在发送日期和时间,我也在SQL Db中使用datetime类型,所以我只是使用2 Datattime picker(即日期从和日期到),我将格式属性更改为自定义。把它设置为(MM/dd/yyyy hh: MM:ss tt),我的问题就解决了。

最新更新