在新服务器上使用美国和英国日期的乐趣

时间:2016-08-08 13:57:21

标签: sql-server date asp-classic iis-8 windows-server-2012

我刚刚享受了"愉快"将旧的ASP网站/ SQL DB移动到新的专用OVH服务器(法语 - 所有默认设置为US-Eng)

数据库已从SQL 2005迁移到SQL 2012(网络版64位)。

我的旧版日期格式在网站上显示为美国格式,例如8/3/2016而不是03/08/2016。即使在数据库中,它们也存储为ISO日期2016-08-03等。

我在ASP CLASSIC上输入日期,网站为英国格式
例如 03/08/2016并将它们转换为传递给存储过程的SQL中的ISO格式2016-08-03,该存储过程的顶部有SET DATEFORMAT YMD。

如果我检查数据库中的表,它们都被正确存储为ISO日期。

我确保数据库的所有SQL登录都有"英国英语"被选为"默认语言"。

如果我在选项下查看数据库属性,则默认语言为英国英语。

如果我在General-> Language it's English(美国)下查看服务器属性,但在Advanced->默认语言下查看英国英语。

日期正确地存储为ISO,好像我做了DATEDIFF(DAY,Stamp,GETDATE())= 0我可以看到所有记录,即使它们以美国格式8/3 /出现在网站上2016年(为什么美国约会前没有零我不知道)

ASP代码没有改变,或者它刚刚移植到这个新的专用服务器中的数据库代码,现在我遇到了这些问题。我确信我只是通过更改默认登录语言解决了这个问题,但这似乎并不适用于此框。

由于我使用Betfair API获取比赛数据的.NET应用程序的日期(混合美国/英国)导致重复插入,因此我收到了大量的主键/索引错误,例如

EXEC dbo.usp_net_insert_betfair_market_selection @MarketID = 125932808, @SelectionID = 10593225, @Racedatetime = '2016-08-03 15:10:00', @MarketType = 'WIN', @HorseName = 'She Done Good';

违反PRIMARY KEY约束' PK_BETFAIR_MARKET_SELECTIONS'。无法在对象' dbo.BETFAIR_MARKET_SELECTIONS'中插入重复的密钥。重复键值为(719859,WIN,2016年3月8日下午3:10)。

但是,如果我复制该EXEC语句并在查询分析器窗口中直接运行它,它将运行而不会出现任何错误。

我一直在搜索我的头,我看到有人建议将此代码放在所有ASP页面的顶部,显示日期以强制它以英国格式显示> https://www.webwiz.co.uk/kb/asp-tutorials/date-time-settings.htm

' *将服务器区域设置为UK Session.LCID = 2057

这在某些页面上有效,但我以前从未这样做过。

在一列中包含长记录和日期列表的页面上,我在SQL中将日期包装在CONVERT(varchar,GETDATE(),103)中,并在页面上正确返回。

我很困惑,因为我从来没有在旧的设置上做到这一点,似乎必须有一些设置需要更改以修复所有这些在新服务器(SQL和Web IIS 8)上框。

我尝试进入.NET全球化网站并将文化和UI文化更改为英语(en)。然而,这并没有解决所有问题。

"语言"机器上的偏好设置为英语(英国),虽然我不会这样做会产生影响。

如果我在查询分析器中将此代码运行到框中,或者通过我的本地SQL控制台通过网络连接到该机器

选择名称,别名,dateformat 来自syslanguages 其中langid = (从master..sysconfigures中选择值 其中comment ='默认语言')

在查询窗口(远程桌面到服务器)中,我回来了

名称别名dateformat 英国英国人dmy

ASK:
所以它似乎与ASP网站或.NET应用程序与服务器/数据库之间的连接有关。我错过或需要改变的东西,因为这在旧的WebServer上工作正常 - >我们有数据库服务器设置。

你能想到我忽略或需要做的事情,以确保日期在网站上显示为英国而不编辑每个ASP页面和包含日期的SQL,因为我从来没有为旧设置做到这一点。

提前感谢您的帮助!

0 个答案:

没有答案