Как проверить, под каким языком работает приложение .NET, не имея доступа к его исходному коду? - PullRequest
0 голосов
/ 12 сентября 2008

Контекст: Я отвечаю за запуск службы, написанной на .NET. Собственное приложение. Он использует базу данных SQL Server. Он работал как пользователь группы «Администраторы» на локальном компьютере. Он работал нормально, прежде чем я добавил машину в домен.

Итак, я добавил машину в домен (Win 2003) и изменил пользователя на члена группы «Опытные пользователи», а теперь

Проблема: Некоторые из SQL-предложений, которые он пытается выполнить, «магически» испанской локализации (где вместо.) Отделяются числа с плавающей запятой, что приводит к ошибкам.

В INSERT меньше столбцов утверждение, чем значения, указанные в ЗНАЧЕНИЕ Количество значений в предложение VALUES должно соответствовать количество столбцов, указанных в Вставить заявление. в System.Data.SqlClient.SqlConnection.OnError (SqlException исключение, Boolean breakConnection)

Операционная система и региональные настройки аппарата на английском языке. Я спросил поставщика приложения, и он сказал:

Похоже, у вас есть комбинация код работает под испанским языком, и SQL-сервер под английской локалью. Так SQL ожидает «15 .28», а не '15, 28'

Что выглядит неправильно для меня на разных уровнях (как SQL Server может различать запятые для разделения аргументов и запятые, принадлежащие числу с плавающей запятой?).

Итак, кажется, что код захватывает испанский язык откуда-то, я не знаю, является ли он пользователем, с которым он работает, или где-то еще (может быть, глобальной политикой?). Но вопрос

В каких местах локализация определяется на основе компьютера / пользователя / домена?

Я не знаю всех мест, где мне нужно искать виновного, поэтому, пожалуйста, помогите мне найти его!

Ответы [ 5 ]

3 голосов
/ 12 сентября 2008

В .NET существует два типа локализации, обе настройки для культур можно найти в этих переменных (запустите приложение командной строки .NET на машине, чтобы увидеть, что оно говорит):

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

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

Они относятся к настройкам на панели управления (в разделе региональных настроек). Создайте приложение командной строки .NET, а затем просто вызовите ToString () для указанных выше свойств, которые должны указать, на какое свойство нужно смотреть.

Edit:

Оказывается, настройки для локали на пользователя хранятся здесь:

HKEY_CURRENT_USER\Control Panel\International

Возможно, стоит проверить реестр пользователя с испанской локалью и сравнить его с тем, кто настроен на использование в США или какой локали вам требуется.

1 голос
/ 12 сентября 2008

Вы можете установить его в контексте потока, в котором выполняется ваш код.

System.Threading.Thread.CurrentThread.CurrentCulture

0 голосов
/ 12 сентября 2008

Узнал, почему это случилось только на этой машине. Это был единственный, где я вошел в систему с этим пользователем, затем контроллер домена установил для него региональные настройки.

0 голосов
/ 12 сентября 2008

Хорошо, если это зависит от пользователя, проверьте Региональные и языковые параметры панель управления.

Обратите внимание, что разработчик не знает о культуре при использовании строк.

0 голосов
/ 12 сентября 2008

Отлично, я создал консольное приложение, и действительно, приложение не сумасшедшее, CurrentCulture по-испански, но только для ЭТОГО пользователя на ЭТОЙ машине. Если я запускаю консольное приложение от имени другого пользователя, оно возвращает английский для всех культур.

Должен ли я открыть новый вопрос, спрашивающий, где находятся пользовательские настройки локали?

...