Domanda

Io uso di SQL Server 2008 R2 come archivio dati.

Fino ad ora sulla macchina di test ho avuto la versione inglese del software e usato per fare le query di formattazione del campo datetime come

fromDate.ToString("MM/dd/yyyy");

ora ho schierato il database su un altro server che è in lingua italiana. Io cambiare il formato nel mio codice per

fromDate.ToString("dd/MM/yyyy");

C'è un modo per rendere la query in un formato neutro?

grazie!

Modifica :

Ho dimenticato di dire che sto usando NetTiers con CodeSmith. Ecco un esempio completo

AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
È stato utile?

Soluzione

ISO 8601 Elementi di dati e formati di interscambio - Informazioni di interscambio - Rappresentanza di date e orari permette sia la YYYY-MM-DD e YYYYMMDD. SQL Server riconosce le specifiche ISO.

  

Anche se la norma consente sia al   Formati AAAA-MM-DD e AAAAMMGG per   completa data di calendario   rappresentazioni, se il giorno [GG] è   omessa allora solo formato AAAA-MM   È permesso. Vietando le date di   la forma AAAAMM, i normali evita   confusione con il troncato   Rappresentazione YYMMDD (ancora spesso   utilizzato).

Io preferisco il formato AAAAMMGG, ma penso che sia perché sapevo solo che per cominciare, ed a me sembra più universale, dopo aver fatto fuori con i personaggi che potrebbero essere considerate specifico locale.

Altri suggerimenti

Si dovrebbe condividere il codice che si utilizza per eseguire la query, ma credo che si stanno costruendo una query SQL dinamicamente utilizzando concats stringa per costruire la query e gli argomenti. Si dovrebbe piuttosto utilizzare una query parametrizzata allora si può passare i dati come un oggetto data e non c'è bisogno di converto una stringa.

Per esempio, se la query potrebbe essere qualcosa di simile

DateTime fromDate = DateTime.Now;

SqlCommand cmd = new SqlCommand(
  "select * from Orders where fromDT = @fromDate", con);

cmd.Parameters.AddWithValue("@fromDate", fromDate);

...

Come effetto collaterale buona, questo ridurrà il rischio di SQL injection . Aggiornamento: Dopo la modifica che fa cambiare in modo significativo il contesto domanda, e devo ammettere che ho Zero conoscenza del progetto .netTiers. Ma solo per curiosità hai provato solo di passaggio le istanze di data direttamente come di seguito?

AppointmentQuery aq = new AppointmentQuery(true, true); 
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate); 
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate); 
AppointmentService aSvc = new AppointmentService(); 
TList<Appointment> appointmentsList = aSvc.Find(aq); 

Personalmente, io uso sempre yyyy-MM-dd. Questo rende anche ordinabile come una stringa.

Tuttavia, una data è una data è una data. Non c'è bisogno di cambiare la data in una stringa. In .NET, DateTime utente.

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