我刚刚享受了"愉快"将旧的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,因为我从来没有为旧设置做到这一点。
提前感谢您的帮助!