警告:经典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 回答
我正在使用Classic ASP / VBScript,并发现SQL2012使用SQL Native驱动程序(“Provider = SQLNCLI11”)和Windows提供的ADO模块(可能是Vista或更新版本[我的是Windows Servr2012 R2 - 版本[MyDbConn.version] ]显示为6.3)现在再次起作用 .
我一直在寻找/期待Field.Type为adDate [7],但实际上我正在获取adDBDate [133]
日期字段比您的ADODB版本更新 . 所以它不明白它得到了什么 .
你可以通过使用来振作起来
如果将ADODB版本升级到2.8和/或使用SQL Native Client进行连接,也可能会得到正确的结果 . 显然,我没有尝试过,因为我住在2014年 .
如果你让它更简单一点,将ADO从图片中删除并使用isdate和“convert date”和vartype .
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(在您的代码中)已设置将确定日期格式化为什么格式 . 对大多数人来说不应该是一个问题,但显然要测试你是否得到了预期的结果 .