2013-01-08 95 views
3

我最近將一個經典的ASP網站轉移到新的服務器上。服務器運行IIS7.5。該站點通過ODBC連接到MS SQL數據庫。它的應用程序池正在運行在NETWORK SERVICE之下。經典ASP + TSQL:日期時間格式問題

通過這家企業規模的網站散佈是已經在舊服務器上運行良好datetime輸入字段,但現在他們都具有以下錯誤:

[Microsoft][SQL Server Native Client 10.0][SQL Server]The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

它期待錯誤datetime格式。代碼中使用的格式始終爲yyyy/MM/dd。當我在表單字段中交換月份和日期頭寸時,它可以工作。即yyyy/dd/MM(這很奇怪)。

Windows控制面板,IIS全球化和NETWORK SERVICE用戶的註冊表鍵都設置爲en-GB!

我已經測試了代碼,一直到調用數據庫,輸入看起來不錯。然後我也複製了這個sql,並在我自己的登錄下通過SQL Server Management Studio運行它,這也很好。只有在通過網站(通過NETWORK SERVICE並通過ODBC連接)運行時纔會失敗。

任何幫助,非常感謝。

+5

停止在字符串中傳遞日期時間值。我確信即使使用ODBC,也有一個可以適當轉換日期時間值的轉換層。如果*不是*,則使用明確的格式。 (對於日期,它是'YYYYMMDD'沒有分隔符) –

+1

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx –

+1

@Damien_The_Unbeliever:是的,我完全同意。不幸的是,一旦所有的不良習慣都已經落實到位,我就接管了這個完全完成的項目。因爲它以前工作過,所以我更願意在某處更改配置以更好地複製服務器,而不是花費數天時間在多個位置查找和更改代碼。 – hofnarwillie

回答

1

您可以檢查並更改NETWORK SERVICE用戶登錄的默認語言。

在MS SQL Management Studio中,在對象資源管理器中搜索Security/Login /和您的帳戶名稱。在上下文菜單中有屬性項。然後檢查默認語言。

+0

謝謝,但它已經在英式英語(使用格式dd/MM/yyyy)。但我通過yyyy/MM/dd。 – hofnarwillie

+0

@hofnarwillie - 根據英國英語,SQL Server將4/2/2解釋爲'yyyy/dd/MM',即使英國沒有人會識別該格式 –

+0

@Damien_The_Unbeliever啊,好的。謝謝。儘管如此,仍然沒有解決它。:) – hofnarwillie

1

您可以更改IIS 6的AspLCID metabase property或IIS 7+的LCID屬性:ASP attributes。這是默認使用的。

+0

應該設置ASP屬性的什麼屬性來解決問題?我沒有看到與日期格式或全球化有關的任何內容。 – hofnarwillie

+0

@hofnarwillie - LCID –

+0

謝謝Simon,我將它改爲2057(en-GB),然後改爲9(en),但不幸的是依然沒有結果! :( – hofnarwillie

2

在Web服務器上的ODBC數據源,設置數據源,以「輸出貨幣數字和日期時,使用區域設置」 ...

所以,

Control Panel\All Control Panel Items\Administrative Tools\Data Sources (ODBC) 
Double click your data source 
Click Next 
Enter a valid db user/password, click next 
Select the default DB, then next 
Make sure the box as described above is CHECKED, then finish. 
+0

謝謝,但我已經試過這個沒有效果。 – hofnarwillie

2

在IIS上,在爲Web應用程序的應用程序池 - >高級設置 - >

設置加載用戶配置選項TRUE。這將強制設置爲您的池用戶「採取」。

+0

這裏有什麼好運氣? –