Как использовать ту же базу данных и ту же программу для двух различных локалей в .NET

голоса
3

У меня есть программа # C, который использует SQL Server database.I я уже используют его в стране, которая использует. в качестве десятичного разделителя. Теперь я хочу, чтобы использовать его в другой стране, которая использует, в качестве десятичного разделителя.

в C # есть некоторые настройки уровня приложений, которые можно изменить или написать код, так что я могу использовать те же базу данных и ту же программу? или я должен изменить весь свой код, чтобы справиться с этим новым десятичным разделителем?

Я не знаю, как это works.Basically я думаю, что будут проблемы в My Sql запросов. пример сказать, один из моих существующих утверждений

insert into tblproducts(productId,Price) values('A12',24.10)

Теперь в новой стране станет

insert into tblproducts(productId,Price) values('A12',24,10)

это вызовет ошибку

так что я должен изменить весь код, чтобы справиться с этой ситуацией?

спасибо

Задан 09/12/2008 в 18:17
источник пользователем
На других языках...                            


3 ответов

голоса
1

Если вы создали запрос с использованием конкатенации, используйте параметры вместо. Таким образом, вместо написания:

 var query = "insert into tblproducts(productId,Price) values('" + article + "','"
    + price + ')';

использовать OleDbParameters :

 var query = "insert into tblproducts(productId,Price) values(?,?)"
 var cmd = new OleDbCommand(query, connection);
 cmd.Parameters.Add("@article", OleDbType.VarChar).Value = article;
 cmd.Parameters.Add("@price", OleDbType.Single).Value = price;

Это позволит вам сэкономить много неприятностей, в том числе вопросов локализации.

Ответил 09/12/2008 в 18:46
источник пользователем

голоса
0

В файле global.asax.vb, вы можете установить культуру текущей загрузки страницы:

Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture

Это сделает всю культуру, знает функциональность работу хорошо. например, (5000,25) .ToString () будет использовать запятые против периодов в зависимости от той или иной культуры, вы установили. Кроме того, прочитав входные данные от пользователя в числовой тип будет обрабатываться в соответствии с их правилами культуры. Даты будут отображаться правильно (12/9/08 vs. 9/12/08). Вы получаете все, что в основном бесплатно.

Это, очевидно, вызывает проблемы при общении с другими системами, которые ожидают все в той же культуре. Чтобы решить эту проблему, вы пишете свои запросы с инвариантной культурой:

(5000.25).ToString(CultureInfo.InvariantCulture) 

Это будет явно установлено, что выход к чему-то, что Mysql может ладить с.

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

Ответил 09/12/2008 в 18:46
источник пользователем

голоса
0

Вы можете сделать несколько вещей, чтобы исправить это.

первых, если вы принимаете значения из интерфейса, то вы бросаете эти значения в десятичной системе. Decimal.Parse является зависимой функцией культуры и будет использовать текущую культуру для анализа значений. Поэтому, если CurrentCulture использует запятые в качестве десятичных разделителей, то ваш бросок будет работать должным образом. Затем, когда вы выводите значение из переменной, вы можете указать формат decimal.ToString всегда выводится с использованием периода в качестве разделителя.

Ой, забыл добавить. Вы также можете изменить свой синтаксический, чтобы указать валюту, которая позволяет запятые, а также $ знаков. например: Decimal.Parse (сумма, NumberStyles.Currency)

Ответил 09/12/2008 в 18:44
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more