2009-04-21 34 views
3

當日期字段的日期格式從4/16/2009 12:00:00 AM更改爲2009年4月16日時,我遇到了一個奇怪的問題:00:00。我將應用程序設置爲寫出每個存儲的proc,如果它存在,則使用相同的相應日期字段進行觸發。這是什麼出來。你會注意到,格式切換中途無法解釋。在ASP.NET Web應用程序請求期間莫名其妙地改變文化

EXECUTE uspContent_SelectOne '132' 
4/16/2009 12:00:00 AM 
EXECUTE uspContent_SelectOne '127' 
4/16/2009 12:00:00 AM 
EXECUTE uspContent_SelectOne '133' 
4/16/2009 12:00:00 AM 
EXECUTE uspContent_SelectOne '131' 
4/16/2009 12:00:00 AM 
EXECUTE uspAttachment_SelectAll 
EXECUTE uspArticleAuthors_SelectAll_ArticleId '3' 
EXECUTE uspArticles_SelectOne '3' 
EXECUTE uspAuthors_Letters 
EXECUTE uspAuthors_Letters 
EXECUTE uspAuthors_Letters 
EXECUTE uspAuthors_SelectAll_Letter_LastName 'A' 
EXECUTE uspFiles_SelectAll_NoFileData 
EXECUTE uspArticles_SelectOne '3' 
EXECUTE uspArticleTypes_SelectAll 
EXECUTE uspFiles_SelectAll_NoFileData 
EXECUTE uspAuthors_SelectOne '0' 
EXECUTE uspArticleAttachments_SelectAll_ArticleId '3' 
EXECUTE uspArticleAttachments_SelectOne_ArticleId_AttachmentId '3','4' 
EXECUTE uspAttachment_SelectOne '4' 
EXECUTE uspContent_SelectOne '132' 
16/04/2009 00:00:00 
EXECUTE uspContent_SelectOne '127' 
16/04/2009 00:00:00 
EXECUTE uspFiles_SelectOne_NoFileData '60' 
EXECUTE uspArticleAttachments_SelectOne_ArticleId_AttachmentId '3','3' 
EXECUTE uspAttachment_SelectOne '3' 
EXECUTE uspContent_SelectOne '133' 
16/04/2009 00:00:00 
EXECUTE uspContent_SelectOne '131' 
16/04/2009 00:00:00 
EXECUTE uspAttachment_SelectAll 
EXECUTE uspArticleAuthors_SelectAll_ArticleId '3' 
EXECUTE uspAuthors_SelectAll_Letter_LastName 'A' 
EXECUTE uspContent_SelectOne '129' 
18/09/2008 00:00:00 
EXECUTE uspContent_SelectOne '7' 
18/09/2008 00:00:00 
EXECUTE uspContent_SelectOne '8' 
18/09/2008 00:00:00 
EXECUTE uspContent_SelectOne '9' 
18/09/2008 00:00:00 
EXECUTE uspContent_SelectOne '10' 
18/09/2008 00:00:00 
EXECUTE uspContent_SelectOne '11' 
18/09/2008 00:00:00 
EXECUTE uspFiles_SelectAll_NoFileData 

我想不通爲什麼。我正在使用ASP.NET/C#,SQL Server 2005和MS Enterprise Library 4.1。

更新1

我檢查應用程序的區域性設置,得到了這一點。對於每個日期字段查詢,我檢查了文化。在拍攝下面你的屏幕上可以看到如何從美國到英國的文化變遷:

image of cuture changing http://www.craigmoliver.com/cultureissue.jpg

在它設置爲web.config中的設置如下:

<globalization culture="en-US" uiCulture="en-US" requestEncoding="utf-8" responseEncoding="utf-8" enableClientBasedCulture="false" /> 

回答

4

是從哪裏來的要求不同的瀏覽器?您是否從HTTP請求中的Accept-Language頭文件獲取Culture/UICulture?如果是這樣,您可能有一個瀏覽器的首選語言設置爲en-US,另一個設置爲en-GB?

+0

這是EN-US,EN; Q = 0.5通過請求。 – craigmoliver 2009-04-21 19:32:46

3

檢查當前文化的建議是有前途的。

需要考慮的另一種可能性是:您的應用程序是否在負載平衡的服務器場中運行,並且Web服務器的配置是否相同?

+0

它們沒有負載平衡,這發生在我的本地機器和dev服務器上。 – craigmoliver 2009-04-21 19:26:51

0

在我執行「Convert.ToDate」的方法,我把下面的代碼:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 

還是不知道它爲什麼這樣做。我的機器和開發服務器上的默認文化是en-US。

這令人發狂!

1

創建一個斷點,每當Thread.CurrentThread.CurrentCulture發生更改時觸發。至少應該指出你朝着正確的方向。

0

如果您正在使用由XSD架構(DataSet.ReadXmlSchema法)產生的數據集,和XSD包含msdata:Locale屬性,這個數據集文化相關的操作可能會使用的語言環境從架構,忽略web.config設置。 爲當前線程顯式設置它,然後再次覆蓋來自XSD的語言環境。

我曾經在一次奇怪的與語言環境有關的問題上失去了幾個小時,結果原因就在此。

也許類似的東西也可以隱藏在企業庫配置文件中。 我也建議搜索所有違反語言環境字符串(en-UK)的項目相關文件。也許有趣的事情出現了。

0

這是發生在單個頁面的生命週期中,還是跨越多個頁面?如果它跨越多個頁面,則還應該在應用中的每個頁面的標記中檢查@Page指令 - 您可以在其中顯式設置區域性和UI文化。也許你有一個流氓頁面的文化設置不當。

+0

在頁面上,請勿修改文化 – craigmoliver 2009-05-06 22:17:15

0

您還可以檢查您的過程以使用SET DATEFORMAT語句。在SQL Server中,可以在過程的上下文中更改日期值的解釋,以便數據庫以不同方式解析日期。下面的代碼

SET DATEFORMAT 'DMY'; 
SELECT CAST('1-4-2009' AS date); 
SET DATEFORMAT 'MDY'; 
SELECT CAST('1-4-2009' AS date); 

返回我的電腦上,結果如下因此

2009-04-01 
2009-01-04 

SQL Server將解釋字符串值按不同的