首页 文章

日期的ADO记录集类型

提问于
浏览
2

警告:经典ASP未来 . :)

我正在研究传统的经典ASP应用程序,并且我遇到了一个带有ADODB.Recordset对象的奇怪现象 .

我有一个包含特定字段的SQL2012数据库表 . 我们称之为 AnnoyingField . 它在SQL中的数据类型是'date' .

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

For each Field in rs.Fields
    typeid = rs(Field.Name).Type
    'do stuff based on type

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

我测试了另一个'datetime'类型的字段,Recordset代码返回了datetime字段的预期Type .. 135 .

任何人都知道为什么'date'字段作为nvarchar返回?

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

3 回答

  • 0

    我正在使用Classic ASP / VBScript,并发现SQL2012使用SQL Native驱动程序(“Provider = SQLNCLI11”)和Windows提供的ADO模块(可能是Vista或更新版本[我的是Windows Servr2012 R2 - 版本[MyDbConn.version] ]显示为6.3)现在再次起作用 .

    我一直在寻找/期待Field.Type为adDate [7],但实际上我正在获取adDBDate [133]

  • 4

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

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

    select convert(datetime, AnnoyingField) from CrazyFuturisticTable
    

    如果将ADODB版本升级到2.8和/或使用SQL Native Client进行连接,也可能会得到正确的结果 . 显然,我没有尝试过,因为我住在2014年 .

  • 1

    如果你让它更简单一点,将ADO从图片中删除并使用isdate和“convert date”和vartype .

    For each Field in rs.Fields
        Field=rs(Field.Name)
        if isdate(Field) then Field=cdate(Field)  ' just in case
        typeid = VarType(Field)
        'do stuff based on type
    

    Vartype http://www.w3schools.com/vbscript/func_vartype.asp

    ADO .type可以报告更多"types" http://www.w3schools.com/ado/prop_para_type.asp

    但我认为vartype可以提供的应该在95%的情况下帮助人们 .

    使用cdate警告,取决于服务器区域设置也是如此,或者您的Session.LCID(在您的代码中)已设置将确定日期格式化为什么格式 . 对大多数人来说不应该是一个问题,但显然要测试你是否得到了预期的结果 .

相关问题