Как перенести двойные и даты из System.Data.OracleClient в ODP.NET? - PullRequest
0 голосов
/ 11 ноября 2011

Эта миграция кажется действительно сложной. Сейчас я пытаюсь выполнить простые запросы к таблице Oracle db:

OBJECTID NOT NULL NUMBER,
DOUBLEVALUE NOT NULL FLOAT(126),
MODTIME DATE

когда я использую System.Data.OracleClient, я могу вставлять параметризованные запросы, где значения параметров:

123, 
"123.123", 
DateTime.Now.ToString(). 

и DbParameter.DbTypes:

DbType.Int32,
DbType.Double,
DbType.Date

Если я использую Oracle.DataAccess.Client, это не работает:

Для DOUBLEVALUE я получаю исключение, потому что в моей системе Convert.ToDouble (который вызывается OracleParameter.PreBind_Double) ожидает, что я использую запятую ("123,123"). Я не хочу менять все значения во всех программах и файлах. Также OleDb может справиться с этим без проблем.

Для MODTIME я получаю «ORA-01830: картинка в формате даты заканчивается перед преобразованием всей входной строки». Это работает, если я изменяю значение на DateTime.Now.ToShortDateString (). Возможно также, если я изменю тип параметра. Также этот OleDb может справиться.

Кажется смешным, что Oracle.DataAccess.Client не может справиться с этими действительно базовыми ситуациями, с которыми у System.Data.OracleClient и System.Data.OleDb нет проблем. Любые рекомендации?

Спасибо и наилучшими пожеланиями -Матти

1 Ответ

0 голосов
/ 11 ноября 2011

Ваша проблема с запятой связана с культурой по умолчанию, используемой вашим потоком обработки. Попробуйте форсировать культуру en-US:

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
...