Массовая вставка SQL Server CE - проблема локализации (C # .NET) - PullRequest
0 голосов
/ 01 мая 2019

У нас есть приложение на C # .NET, которое выполняет массовое обновление базы данных SQL Server CE.Мы храним операторы вставки в файлах на нашем сервере.Приложение захватывает их и выполняет.

Все хорошо, за исключением проблемы с локализацией.Как вы знаете, некоторые страны используют период "."в качестве десятичного разделителя, а другие используют запятую ",".

Мы знали, что столкнулись с проблемами локализации, поэтому вместо сохранения десятичного разделителя в виде "," или "."в нашем файле мы сохраняем его как «[d]» и заменяем его соответствующим разделителем перед выполнением SQL.

Соответствующим разделителем является CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator

Таким образом, наш объемный файл SQL содержит строки, которые выглядят следующим образом:

INSERT INTO DefaultTickSize ([ExchangeID],[InstrumentType],[BaseSymbol],[IsVariableTickSize],[TickSize],[TickValue]) VALUES ('NYMEX','FUT','HP','0','0[d]001','1')

Наш код для обработки объемного файла SQL выглядит следующим образом - он выполняет каждую строку, используя метод «DecimalDecode» для вставки правильного разделителя.

            foreach (string insertRow in sqlFileHKF)
                if (!string.IsNullOrEmpty(insertRow))
                    using (SqlCeCommand cmd = new SqlCeCommand(JTString.DecimalDecode(insertRow), conn))
                    {
                        try
                        {
                            RunExecuteNonQuery(cmd);
                        }
                        catch (Exception e)
                        {
                        }
                    }


    public static string DecimalDecode(string value)
    {
        return value.Replace("[d]", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

    }

И он работает нормально - за исключением некоторых компьютеров, он не,Например, у нас есть один пользователь в Португалии, его разделитель "," и вставки работают нормально.Другой пользователь в Испании, также с разделителем как "," не работает.Вставка 5,5 вставляется как «55».

Это почти как если бы сам SQL Server CE не соблюдал разделитель уровня ОС.

Мы не можем видеть какой-либо шаблон - он просто работает для одних, а не для других.Нам либо нужно как-то заставить SQL Server CE сообщать нам, какой разделитель ему нужен, либо заставлять его использовать тот, который мы отправили, или просто выполнять массовую загрузку другим способом.

Любые мысли

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...