2009-04-21 5 views
3

Je rencontre un problème étrange lorsque le format de date de la date change de 16/04/2009 12:00:00 AM au 16/04/2009 00 : 00: 00 J'ai mis l'application pour écrire chaque proc stocké qui a tiré avec le même champ de date correspondant s'il existe. Voici ce qui est sorti. Vous remarquerez que le format change inexplicablement à mi-chemin.La culture change inexplicablement pendant la demande d'application Web ASP.NET

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 

Je n'arrive pas à comprendre pourquoi. J'utilise ASP.NET/C#, SQL Server 2005 et MS Enterprise Library 4.1.

MISE À JOUR 1

J'ai vérifié les paramètres de culture de l'application et a obtenu cela. Pour chaque requête de champ de date, j'ai vérifié la culture. Dans l'écran ci-dessous, vous pouvez voir comment les changements de culture de US au Royaume-Uni:

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

Le réglage dans le web.config il est défini comme suit:

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

Répondre

4

-ce que les demandes provenant de différents navigateurs? Est-ce que vous prenez la culture/UICulture de l'en-tête Accept-Language dans la requête HTTP? Si oui, il est possible que vous ayez un navigateur dont la langue préférée est en-US et une autre en-GB?

+0

Il est en-nous, en; q = 0,5 à la demande. – craigmoliver

3

Les suggestions pour vérifier la culture actuelle sont prometteuses.

Une possibilité supplémentaire à prendre en compte: votre application s'exécute-t-elle dans une batterie de serveurs à charge équilibrée et les serveurs Web sont-ils correctement configurés de manière identique?

+0

Ils ne sont pas équilibrés et cela se produit sur ma machine locale et sur le serveur de développement. – craigmoliver

0

Dans les méthodes où j'exécutait une « Convert.ToDate » Je mets le code suivant dans:

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

ne sais toujours pas pourquoi il le fait. La culture par défaut sur ma machine et le serveur de développement est en-US.

C'est exaspérant!

1

Crée un point d'arrêt qui se déclenche chaque fois que Thread.CurrentThread.CurrentCulture est modifié. Cela devrait au moins vous orienter dans la bonne direction.

0

Si vous utilisez des jeux de données générés à partir des schémas XSD (méthode DataSet.ReadXmlSchema) et le XSD contient un msdata:Locale attribut, opérations dépendant de la culture sur ce DataSet peut utiliser les paramètres régionaux à partir du schéma, en ignorant les paramètres web.config. La définition explicite pour le thread en cours remplace à nouveau les paramètres régionaux du XSD.

J'ai perdu quelques heures sur des problèmes étranges liés à la commutation locale, ce qui s'est avéré être la raison.

Peut-être que quelque chose de similaire pourrait également se cacher dans les fichiers de configuration de la bibliothèque d'entreprise. Je vous recommande également de rechercher tous les fichiers liés au projet pour la chaîne locale fautive (en-UK). Peut-être que quelque chose d'intéressant se présente.

0

Est-ce que cela se produit pendant le cycle de vie d'une seule page ou sur plusieurs pages? Si c'est sur plusieurs pages, vous devriez également vérifier les directives @Page dans le balisage pour chaque page de votre application - vous pouvez y définir explicitement la culture et la culture de l'interface utilisateur.Peut-être que vous avez une page de voyous avec la culture définie incorrectement.

+0

Sur la page et ne pas modifier la culture – craigmoliver

0

Vous pouvez également vérifier vos procédures d'utilisation de l'instruction SET DATEFORMAT. Dans SQL Server, il est possible de modifier l'interprétation des valeurs de date dans le contexte d'une procédure afin que la base de données analyse les dates différemment. Le code suivant

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

Renvoie les résultats suivants sur mon PC

2009-04-01 
2009-01-04 

SQL Server interprétera donc les valeurs de chaîne que les dates différentes

Questions connexes