从MS-Access数据库检索数字的ASP/SQL代码的格式问题
问题描述:
我有一个本地/开发网站,运行在装有Office 2003的Windows 2003服务器上。我有提取使用非常正常的ASP代码从本地的MS Access数据库中的数据的几个ASP页:从MS-Access数据库检索数字的ASP/SQL代码的格式问题
Site = "filedsn=" & Server.MapPath("/" & WebName & "/reffiles/accessdsn.dsn") & ";DBQ=" & Server.MapPath("/" & WebName & "/reffiles/MyDatabase.mdb") & ";DefaultDir="Server.MapPath("/" & WebName & "/") & ";"
set Database = server.createobject("ADODB.Connection")
Database.open(Site)
strSQLMax = "SELECT Format(Max(GetDataRange.Date_Reading),'dd/mm/yy') AS MaxOfDate_Reading, Format(Max(GetDataRange.Speed), '#,###') AS MaxOfSpeed FROM GetDataRange;"
set WeekRecMax = PiDatabase.Execute(strSQLMax)
response.write("<P>Date of Maximum Speed:" & weekRecMax.fields(0).value & " " & weekRecMax.fields(1).value & " f/hr </P>")
当我在这里的测试代码(我住在法国,但本地服务器配置了区域和语言设置美国),上面的代码的结果是:
最大速度日期:14décembre2016 - 16:03 1 025 F /小时
当我发表我的代码,我们在美国的生产服务器(也是Server 2003与Office 2003)相同的页面给出了这个结果:
最高速度日期:2016年12月14日 - 16:03 1,025 f/hr
当然,结果“1 025”会导致我的代码的其他部分抛出一个错误,因为它不能用于计算。 “1 025”中的空格实际上是一个“不间断空格”,十六进制A0。
所以我的问题是:为什么会发生这种情况,我能做些什么来让本地服务器产生像我们基于美国的生产服务器的输出?
请注意,如果我将'#,###'更改为'####',那么计算过程将毫无问题。因此,这不是一个“展示塞尔”,但它让我想知道其他的惊喜可能会在什么时候出现。
谢谢
答
将DateTime和Numeric值的格式从数据库移到asp.net。
strSQLMax = "SELECT Max(GetDataRange.Date_Reading) AS MaxOfDate_Reading, Max(GetDataRange.Speed) AS MaxOfSpeed FROM GetDataRange;"
response.write("<P>Date of Maximum Speed:" & Convert.ToDateTime(weekRecMax.fields(0).value).ToString("dd MMMM yyyy") & " " & Convert.ToDecimal(weekRecMax.fields(1).value).ToString("N0") & " f/hr </P>")
这些值的格式现在将基于本地化,因此在美国使用它时代码不会中断。
查看更多格式编号here。
实际上,在本地测试时代码会中断,在美国运行良好。如果我理解你的意见,你建议我不要在SQL命令中进行任何格式化,而是在使用这些值时用ASP做所有事情?我看你的建议。谢谢... – RDK
是的,那正是我所建议的。当你在SQL中进行格式化时,你会得到一个字符串而不是日期时间对象。并且将日期时间或小数等字符串转换回来总是很麻烦。 – VDWWD
好的,这有效,但实际上我的问题确实与“修复”本地服务器而不是我的代码有关。对这个问题有什么想法? – RDK