Question

Cela m'a vraiment flumoxé!

  1. Dans le calque de données, ADO.NET se connecte à SQL Server 2008, la langue par défaut pour la connexion est "britannique"
  2. Sélectionne une colonne DateTime dans un affichage de données et le renvoie.
  3. références de page aspx
  4. this: <% # String.Format (& "; {0: MMM / aaaa} &"; Eval (& "; dbPeriodFrom &";))% >

La base de données renvoie le 10/10/2009 (Il s'agit de aaaa / mm / jj) Le résultat de l'étape 4 est janvier 2009 ????

Les paramètres régionaux du serveur Web sont Royaume-Uni. Il n'y a pas de section & Lt; mondialisation ... dans machine.config La globalisation NET dans IIS est définie sur uiCulture = en culture = en-GB Je l'ai même mis dans le web.config pour le site

C’est un classique & "Works sur ma machine de développement" & "; Mais, bouleversé une fois déployé au scénario de production. Qu'est-ce que j'aurais pu manquer?

MODIFIER

Ainsi, il apparaît que la connexion utilisée par l'application ASP.NET pour se connecter à SQl Server 2008 reçoit une date et heure américaine, même si, dans les propriétés de la connexion, la langue par défaut est définie sur "Anglais britannique".

Le problème se produit dans TSQL:

SELECT 
    DATEPART(month, CAST('2009.02.01' AS DATETIME))
    ,DATEPART(month, CONVERT(DATETIME, '2009.02.01', 102))

OUTPUT pour la connexion intégrée à Windows (administrateur) avec la langue par défaut définie sur 'Anglais'

2 2

OUTPUT pour la connexion à SQL Server utilisée par ASP.NET avec la langue par défaut définie sur 'Anglais britannique'

1 2

Était-ce utile?

La solution

Vérifiez les paramètres régionaux de la base de données elle-même et de leur serveur. Selon la configuration, la date sera formatée en fonction des paramètres régionaux. Je suppose que le serveur de base de données est probablement configuré sur US English - Poke dans les paramètres régionaux du serveur de base de données lui-même.

J'espère que ça aide, Meilleures salutations, Tom.

Autres conseils

Je serais intéressé de voir le code dans lequel vous obtenez la date de la commande / du lecteur / de l'adaptateur - si la colonne de la base de données est saisie sous la forme datetime, alors ce qui vient sur le fil ne l'est pas réellement " 2009/10/01 " - c'est un nombre binaire (comme la plupart des dates sont sur le fil). En tant que tel, il n'y a pas d'ambiguïté.

Je suppose que quelque part vous le traitez comme une chaîne (peut-être une Parse) - cela ne devrait pas être nécessaire. Si tel est le cas, vous ne SELECT l’utilisez pas en tant que [n][var]char(x), mais en tant que <=>.

Vérifiez la valeur stockée dans la base de données à l'aide de Management Studio. Le format universel de date du serveur MS SQL Server est également AAAA-MM-JJTHH: MM: SS.mmm (2009-01-05T10: 12: 55.001) et YYYYMMDD (20090105). Ces formats analysés sont toujours les mêmes, quelle que soit la langue utilisée par la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top