2016-10-24 2 views
0

Мы перешли от неуправляемого к управляемому Oracle в наше приложение Winform, и все работает отлично, за исключением одной детали. Если я сохраню строку "≤" в базе данных, а затем попытаюсь вернуть ее снова, я получаю "=" назад. Он хранится как nvarchar, и я вижу (через Toad), что он фактически сохранен как "≤". Когда мы запускали неуправляемый доступ к данным, мы использовали "NLS_LANG = SWEDISH_SWEDEN.WE8MSWIN1252", но, насколько я могу судить, это не поддерживается в управляемом драйвере. Управляемый драйвер должен использовать локаль .NET и кодовую страницу, в которой установлено значение 1252. Кто-нибудь видел это и, возможно, нашел решение?Доступ к управляемому Oracle, поддержка «≤»

ответ

0

Вы правы, управляемый драйвер ODP.NET не NLS_LANG чувствительный. Он чувствителен только к языку .NET.

Однако TOAD не использует управляемый драйвер ODP.NET, поэтому вы должны правильно установить NLS_LANG. Если вы установили его в .WE8MSWIN1252, тогда вы должны установить в Options -> Files -> General -> Default Encoding значение ANSI, соответственно. установите ANSI в диалоговом окне «Сохранить».

+1

Да, я знаю. Жаба показывает правильную строку «≤», но наше управляемое приложение этого не делает. – Martin

+0

На самом деле символ '≤' не поддерживается Windows CP1252, см. [Windows-1252] (https://en.wikipedia.org/wiki/Windows-1252#Code_page_layout). Возможно, попробуйте установить .NET locale в Unicode (т. Е. UTF-8) –

+0

. Проверьте это обсуждение: [Сообщество Oracle] (https://community.oracle.com/thread/2610675?start=15&tstart=0). В основном они говорят: это невозможно, используйте неуправляемый драйвер. Я предполагаю, что ваш 'NLS_NCHAR_CHARACTERSET' является' AL16UTF16' (как вы используете тип данных «NVARCHAR2'), который можно было бы считать« еще не распространенным » –

Смежные вопросы