日期的 ADO 记录集类型

imu*_*kai 3 sql-server types adodb recordset asp-classic

警告:经典 ASP 领先。:)

我正在处理一个旧的经典 ASP 应用程序,但我遇到了一个奇怪的 ADODB.Recordset 对象。

我有一个包含特定字段的 SQL2012 数据库表。我们称之为AnnoyingField。它在 SQL 中的数据类型是“日期”。

ASP 在表上打开一个带有 SELECT 的 ADODB.Recordset 来收集字段,然后执行一些循环来完成它的工作:

For each Field in rs.Fields
    typeid = rs(Field.Name).Type
    'do stuff based on type
Run Code Online (Sandbox Code Playgroud)

出于某种原因,AnnoyingField的类型返回为 202 (nvarchar),而不是日期的预期类型之一(133 甚至 7)。这在代码中导致了一些问题。

我用另一个“日期时间”类型的字段进行了测试,记录集代码返回了日期时间字段的预期类型.. 135。

任何人都知道为什么“日期”字段作为 nvarchar 返回?

在这种情况下,可能无法将数据库字段从日期更改为日期时间,即使这可能是获取预期数据的逻辑路径。

pod*_*ska 5

日期字段比您的 ADODB 版本新。所以它不明白它得到了什么。

你可以通过使用来振作起来

 select convert(datetime, AnnoyingField) from CrazyFuturisticTable
Run Code Online (Sandbox Code Playgroud)

如果您将 ADODB 版本升级到 2.8 和/或使用 SQL Native Client 连接,您也可能会得到正确的结果。显然,我还没有尝试过这个,因为我生活在 2014 年。

  • @imukai 您应该使用 `Provider=SQLNCLI10` 来支持 `DATE` 数据类型(正如 podiluska 指出的那样),因为它仅在 SQL Server 2008 及更高版本中引入。 (2认同)