2008-09-12 9 views
0

Contexte: Je suis en charge de l'exécution d'un service écrit en .NET. Application propriétaire Il utilise une base de données SQL Server. Il s'est exécuté en tant que membre utilisateur du groupe Administrateurs sur la machine locale. Cela a bien fonctionné avant que j'ajoute la machine à un domaine.Comment vérifier les paramètres régionaux dans lesquels une application .NET s'exécute, sans avoir accès à son code source?

Alors, j'ai ajouté la machine à un domaine (Win 2003) et a changé l'utilisateur à un membre du groupe d'utilisateurs de puissance et maintenant, le

Problème: Certaines des phrases SQL il tente d'exécuter sont "magiquement" dans la localisation espagnole (où, sépare les nombres à virgule flottante au lieu de.), conduisant à des erreurs.

Il y a moins de colonnes dans l'instruction INSERT que les valeurs spécifiées dans la clause VALUES. Le nombre de valeurs dans la clause VALUES doit correspondre au nombre de colonnes spécifié dans l'instruction INSERT . à System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection)

système d'exploitation et les paramètres régionaux dans la machine sont en anglais. J'ai demandé au fournisseur de l'application et il a dit:

On dirait que vous avez une combinaison de le code en cours d'exécution dans l'environnement linguistique espagnol et serveur SQL sous paramètres régionaux anglais. Alors le SQL attend '15 .28' et non '15, 28'

Ce qui semble mal à moi dans différents niveaux (comment SQL Server distinguer entre des virgules pour séparer les arguments et les virgules appartenant à un nombre à virgule flottante?). Donc, le code semble s'emparer des paramètres locaux espagnols quelque part, je ne sais pas si c'est l'utilisateur qu'il exécute, ou ailleurs (politique globale, peut-être?). Mais la question est

Quels sont les endroits où la localisation est définie sur une base machine/utilisateur/domaine? Je ne connais pas tous les endroits où je dois chercher le coupable, alors aidez-moi s'il vous plaît à le trouver!

Répondre

3

Il existe deux types de localisation dans .NET, à la fois les paramètres pour les cultures se trouvent dans ces variables (feu une application en ligne de commande .NET sur la la machine pour voir ce qu'il dit):

System.Thread.CurrentThread.CurrentCulture & System.Thread.CurrentThread.CurrentUICulture

http://msdn.microsoft.com/en-us/library/system.threading.thread_members.aspx

Elles concernent les paramètres du panneau de commande (dans la partie des paramètres régionaux). Créer un.Application de ligne de commande NET, puis appelez simplement ToString() sur les propriétés ci-dessus, qui devrait vous indiquer quelle propriété à regarder.

Edit:

Il se trouve le réglage des paramètres régionaux par utilisateur sont tenus ici:

HKEY_CURRENT_USER\Control Panel\International 

Il pourrait être intéressant d'inspecter le registre de l'utilisateur avec les paramètres régionaux espagnol et comparer à un qui est fixé aux États-Unis ou selon les paramètres régionaux dont vous avez besoin.

1

Vous pouvez le définir dans le contexte de thread dans lequel votre code est en cours d'exécution.

System.Threading.Thread.CurrentThread.CurrentCulture

0

Très bien, j'ai créé l'application console et en effet, l'application n'est pas folle, CurrentCulture est en espagnol, mais pour cet utilisateur dans cette machine seulement. Si je cours l'application de console en tant qu'autre utilisateur il renvoie l'anglais pour toutes les cultures. Dois-je ouvrir une nouvelle question me demandant où sont les paramètres régionaux de l'utilisateur?

+0

Si vous pensez que ma réponse répond à votre question initiale, terminez-la et posez une nouvelle question. De toute façon je vais essayer d'obtenir la réponse et l'afficher ici :) –

0

Bien, si c'est spécifique à l'utilisateur, consultez le Panneau de configuration Options régionales et linguistiques. D'un autre côté, donnez un coup de pied au développeur pour ne pas être conscient de la culture lors de l'utilisation de chaînes. </rant >

0

Découvrez pourquoi cela s'est produit uniquement dans cette machine. C'était le seul où je me suis connecté avec cet utilisateur, puis le contrôleur de domaine a défini les paramètres régionaux en espagnol.

Questions connexes