ADODB RecordSet 排序日期字段不正确

ADODB RecordSet sorting date field incorrectly

我有一个 ADODB.RecordSet,它是通过调用 ADODB.RecordSet.Open 传递 stored procedureconnection

的名称来填充的
Dim results As New ADODB.RecordSet
results.Open usp_GetSomeDate, connection //... omitted

存储过程 returns 一个名为 SomeDate 的日期作为 DateTime 并且正确并成功地填充了记录集。

ALTER Procedure usp_GetSomeDate
AS    
select SomeDate from foo

代码然后获取这个填充的 RecordSet 并调用 Sort 例如

results.Sort = "SomeDate"

问题是 这种排序似乎是按 Day 而不是整个 DateTimeSomeDate 进行排序!例如,如果我有以下内容:

04/07/2018 12:43:23
01/03/2017 06:32:12
08/04/2018 09:23:23

并按升序对结果进行排序,我将得到:

01/03/2017 06:32:12
04/07/2018 12:43:23
08/04/2018 09:23:23

而我预期和期望的结果是:

01/03/2017 06:32:12
08/04/2018 09:23:23
04/07/2018 12:43:23

我不明白为什么代码会将这些排序为 DateTime 以外的任何东西,因为我确保从 SQL 存储过程返回的值是 DateTime - 这通常是导致问题的原因, 环顾其他答案(数量不多)

我如何更改它以确保排序为 DateTime

正如@Theo 指出的那样,RecordSet 上的 CursorLocation 属性 需要设置为 adUseClient

Dim results As New ADODB.RecordSet
results.CursorLocation = adUseClient
results.Open usp_GetSomeDate, connection //... omitted

此外,重要的是要确保从 SQL 中选择的字段是 DateDateTime,以便记录集按日期而不是字符串排序!