Domanda

Questo mi ha fatto davvero schifo!

  1. Nel datalayer ADO.NET si connette a SQL Server 2008, la lingua predefinita per l'accesso è "british"
  2. Seleziona una colonna DateTime in una visualizzazione dati e la restituisce.
  3. aspx page databinds
  4. questo: <% # String.Format (" {0: MMM / yyyy} " ;, Eval (" dbPeriodFrom "))% gt &;

Il database restituisce il 2009/10/01 (Questo è aaaa / MM / gg) Il risultato del passaggio 4 è Jan2009 ????

Le impostazioni internazionali del server Web sono Regno Unito Non esiste alcuna sezione & Lt; globalizzazione ... in machine.config La globalizzazione NET in IIS è impostata su uiCulture = en culture = en-GB L'ho anche impostato nel web.config per il sito

Questo è un classico " Funziona sulla mia macchina di sviluppo .. " Ma, risolto quando distribuito allo scenario di produzione. Cosa avrei potuto perdere?

Modifica

Quindi sembra che il login usato dall'applicazione ASP.NET per connettersi a SQl Server 2008 stia ottenendo un datetime negli Stati Uniti, anche se nelle proprietà per il login, la lingua predefinita è "British English".

Il problema si verifica in TSQL:

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

OUTPUT per l'accesso integrato di Windows (amministratore) con la lingua predefinita impostata su "inglese"

2 2

OUTPUT per l'accesso a SQL Server utilizzato da ASP.NET con la lingua predefinita impostata su "Inglese britannico"

1 2

È stato utile?

Soluzione

Controlla le impostazioni locali sul database stesso e sul loro server, a seconda della configurazione, la data verrà formattata conformemente all'impostazione locale. Ho il sospetto che il server di database sia probabilmente impostato sull'inglese americano - Cercate nelle impostazioni regionali sul server db stesso.

Spero che questo aiuti, I migliori saluti, Tom.

Altri suggerimenti

Sarei interessato a vedere il codice in cui ottieni la data dal comando / lettore / adattatore - se la colonna del database è digitata come datetime, allora ciò che passa sopra il filo non lo è attualmente " 2009/10/01 " - è un numero binario (come la maggior parte delle date sono sul filo). Come tale non c'è ambiguità.

Mi aspetto che da qualche parte lo stai trattando come una stringa (forse un po 'Parse) - questo non dovrebbe essere necessario. Se lo è, non lo stai SELECT inserendolo come [n][var]char(x), ma come <=>.

Controlla il valore memorizzato nel database usando Management Studio. Anche nel formato universale della data del server MS SQL è AAAA-MM-GGTHH: MM: SS.mmm (2009-01-05T10: 12: 55.001) e AAAAMMGG (20090105). Questi formati sono sempre stati analizzati, indipendentemente dalle impostazioni locali utilizzate dal database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top