Question

J'utilise sql server 2008 R2 en tant que banque de données.

Jusqu'à présent sur la machine de test, j'ai eu la version anglaise du logiciel et utilisé pour effectuer des requêtes de mise en forme le champ datetime

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

maintenant j'ai déployé la base de données sur un autre serveur qui est dans la langue italienne. Je changerai le format dans mon code à

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

Y at-il un moyen de faire la requête dans un format neutre?

merci!

EDIT :

J'ai oublié de mentionner que j'utilise NetTiers avec CodeSmith. Voici un exemple complet

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);
Était-ce utile?

La solution

ISO 8601 Eléments de données et formats d'échange - Échange d'information - Représentation des dates et heures permet à la fois l'AAAA-MM-JJ et AAAAMMJJ. SQL Server reconnaît les spécifications ISO.

  

Bien que la norme permet à la fois la   formats AAAA-MM-JJ et AAAAMMJJ   date du calendrier complet   représentations, si le jour [JJ] est   omis alors que le format AAAA-MM   est autorisée. En déniant dates   la forme YYYYMM, les standards évite   confusion avec le tronqué   représentation YYMMDD (encore souvent   utilisé).

Je préfère le format AAAAMMJJ, mais je pense que ce parce que je ne connaissais que pour commencer, et pour moi, il semble plus universel, ayant fait disparaître les caractères qui pourraient être considérés comme spécifiques locale.

Autres conseils

Vous devez partager le code que vous utilisez pour exécuter la requête, mais je suppose que vous construisez une requête SQL dynamiquement à l'aide concats de chaîne pour construire la requête et les arguments. Vous devriez plutôt utiliser une requête paramétrée, vous pouvez transmettre les données comme un objet date et pas besoin de converto une chaîne.

Par exemple, si votre requête pourrait être quelque chose comme ceci

DateTime fromDate = DateTime.Now;

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

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

...

Comme un bon effet secondaire, cela réduira votre risque de injection SQL . Mise à jour: Après votre édition qui ne change le contexte de la question de manière significative, et je dois admettre que je connais zéro du projet .netTiers. Mais juste par curiosité avez-vous essayé simplement passer directement les instances de date comme dans ce qui suit?

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); 

Personnellement, je l'utilise toujours yyyy-MM-dd. Cela rend également classables comme une chaîne.

Cependant, une date est une date est une date. Il n'y a pas besoin de changer la date d'une chaîne. Dans .NET, l'utilisateur DateTime.

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