2009-11-13 4 views
0

J'ai une simple requête de critères NHibernate qui est à la recherche des dossiers avec un datetime moins aujourd'hui:critères NHibernate d'émission de format datetime

example: 

criteria.Add(Expression.Le("TheDate", DateTime.Today)); 

Cependant, les résultats que je reçois sont incorrects lorsque le jour/mois est ambigu (Par exemple, le 12 novembre 2009 renvoie les enregistrements du 11 décembre 2009)

J'ai regardé le SQL généré et le format datetime montrera 12/11/2009, et si j'exécute la requête SQL directement dans SQL Manager, il sera seulement renvoie les résultats corrects avec le format de date 11/12/2009.

Existe-t-il un moyen de définir le format de date SQL à partir de l'expression de critère ou dois-je faire quelque chose à la table de base de données?

Un grand merci

+0

Pouvez-vous envoyer le SQL il produit à l'aide de profils SQL (si elle est SQL Server) –

+0

Le code NHibernate produit (la colonne datetime est appelée TimeStamp): NHibernate: SELECT top 1 this_.PriceFeedID comme PriceFee1_2_1_, this_.Name comme Name2_1_ , le code // enlevé montrant toutes les colonnes // p1_.TimeStamp comme TimeStamp0_0_, p1_.PriceFeedID comme PriceFee7_0_0_ dE PriceFeed this_ jointure interne p1_ PriceFeedData sur this_.PriceFeedID = p1_.PriceFeedID OÙ this_.Code = @ p0 et p1_.TimeStamp <= @ p1 ORDER BY p1_.TimeStamp desc; @ p0 = 'CODEID', @ p1 = 12/11/2009 00:00:00 – Toby

Répondre

0

Il n'y a pas un paramètre spécifique NHibenrate à faire avec les formats et paramètres régionaux date. Le problème est avec la base de données. Dans mon système et sans aucun paramètre spécifique, je reçois des dates de mes requêtes NHibernate comme @ p2 = '2009-11-13 12: 48: 22: 000'. C'est en aaaa-mm-jj et je n'envoie pas de dates de cette façon à partir de mon code, ni je demande à NHibernate de le faire explicitement.

Cela se produit dans la base de données et elle est liée à la langue par défaut de l'instance de SQL Server et/ou au paramètre de langue du compte utilisateur que la connexion DB de NHibenrate utilise. Je crois que cela peut également être lié aux paramètres de format de date du système d'exploitation en conjonction avec la langue par défaut de l'instance SQL Server.

Dans SQL Server Management Studio, vous pouvez faire un clic droit sur l'instance pour modifier/corriger la langue dans l'onglet Paramètres avancés de la boîte de dialogue Propriétés. Vous devrez également aller modifier/réparer la langue par défaut utilisée pour le compte utilisateur utilisé par NHibernate (récupérez-le à partir de la chaîne de connexion). Sur votre instance de serveur, développez Sécurité-> Connexions et cliquez avec le bouton droit de la souris sur la connexion correcte pour afficher la boîte de dialogue Propriétés. Dans l'onglet général, vous pouvez définir un paramètre "Langue par défaut".

J'ai eu ce problème avant et la définition des langues dans SQL Server en tant que "anglais britannique" résolu le problème (je suis situé au Royaume-Uni). Votre cas peut-être similaire à celui que j'ai résolu de cette façon.

0

Un grand merci pour votre réponse, je pensais que peut-être quelque chose comme les paramètres de localisation.

J'ai effectivement travaillé autour du problème en utilisant HQL, mais je vais garder cela à l'esprit.