当我运行以下代码时,这可能是什么问题,因为它没有返回年龄?
<% ' calculate age of employee
bsql = "select DATEDIFF(yyyy,DateOfBirth,GETDATE()) from employees "
set brs = Server.CreateObject("ADODB.Recordset")
brs.open bsql, dbconn, 1,2%>
<%=rs("DateOfBirth") %>
答案 0 :(得分:-1)
由于@ar34z在评论中有pointed out;
“您没有选择该列,但正在创建新列”
将任何计算添加到表格中的字段后,您将创建所谓的“计算列”或“表达式”,指定{{1}因为命名字段不起作用,因为ADO不知道列DateOfBirth
只是一个未命名的计算列。
理想情况下,您希望使用别名来使计算列更容易识别
DateOfBirth
或
SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) [DateOfBirth]
FROM employees
使用SQL Server都可以正常工作,并且使用任何一种变体都没有遇到任何问题。
当计算列返回年龄(不是出生日期)时,您可以为列SELECT DATEDIFF(yyyy, DateOfBirth, GETDATE()) AS [DateOfBirth]
FROM employees
添加别名,然后使用[Age]
从{{{}输出它1}}。
旁注:由于@damien-the-unbeliever在评论中有mentioned,您的年龄计算在这一点上并不十分准确,StackOverFlow上还有另外一个问题一些有趣的答案(只是不接受接受的答案作为福音)。
因为它是(这只是我个人的观点)这个答案(https://stackoverflow.com/a/1572938/692942)是最好的。
为了完整起见,您还可以指示<%= rs("Age") %>
按顺序位置返回字段,而不是通过在这种情况下传递基于0的字段位置索引来命名
ADODB.Recordset
可以工作并返回ADODB.Recordset
中的第一个字段。
考虑到所有这些,我建议的解决方案(针对当前问题)将是;
<%= rs(0) %>
您会注意到我已替换SELECT
ADODB DLL常量中的数值,以了解如何使用这些值我建议您阅读Using METADATA to Import DLL Constants。