我有一个本地/开发网站,在安装了Office 2003的Windows 2003服务器上运行。我有几个ASP页面使用非常正常的ASP代码从本地MS Access数据库中提取数据:
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>")
当我在这里测试代码时(我住在法国,但是本地服务器配置了美国的区域和语言设置),上面代码的结果是:
最高速度日期:2016年12月14日 - 16:03 1 025 f / hr
当我将代码发布到美国的生产服务器(也是带有Office 2003的Server 2003)时,同一页面会显示以下结果:
最高速度日期:2016年12月14日 - 16:03 1,025 f / hr
当然,结果“1 025”会导致我的代码的其他部分抛出错误,因为它不能用于计算。 “1 025”中的空格实际上是“非破坏空间”,十六进制A0。
所以我的问题是:为什么会发生这种情况,我该如何对本地服务器进行输出以产生类似我们基于美国的生产服务器的输出?
注意,如果我将'#,###'更改为'####',那么计算将继续进行而不会出现问题。因此,这不是一个“显示停止者”,但它让我想知道其他惊喜可能潜伏在拐角处。
由于
答案 0 :(得分:1)
将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。