Виждам пет потенциални области за проблеми:
-
Как всъщност вкарвате текста във вашето .NET приложение? Ако е твърдо кодиран в низов литерал, сигурни ли сте, че компилаторът приема правилното кодиране за вашия изходен файл?
-
Може да има проблем в начина, по който го изпращате в базата данни.
-
Може да има проблем с това как се съхранява в базата данни.
-
Може да има проблем с начина, по който го извличате в базата данни.
-
Може да има проблем с това как го показвате отново след това.
Сега области 2-4 звучат така, сякаш е по-малко вероятно да бъдат проблем, отколкото 1 и 5. Как показвате текста след това? Наистина ли го извличате от базата данни в .NET, или използвате Toad или нещо подобно, за да се опитате да го видите?
Ако го пишете отново от .NET, предлагам ви да пропуснете базата данни изцяло - ако просто покажете самия низ, какво виждате?
Имам статия, която може да ви бъде полезна за отстраняване на грешки в Unicode проблеми. По-специално, концентрирайте се върху всяко място, където кодирането може се объркате и се уверете, че всеки път, когато „показвате“ низ, изхвърляте точните символи на Unicode (като цели числа), за да можете да ги проверите, а не просто каквото текущият ви шрифт иска да покаже.
РЕДАКТИРАНЕ:Добре, значи базата данни е замесен някъде в проблема.
Азсилно предлагаме да премахнете нещо като ASP и HTML от уравнението. Напишете просто конзолно приложение, което нищо не прави но поставете низа и го извлечете отново. Накарайте го да изхвърля отделните символи на Unicode (като цели числа) преди и след. След това опитайте да видите какво има в базата данни (например с помощта на Toad). Не познавам функциите на Oracle за преобразуване на низове в поредици от отделни символи в Unicode и след това преобразуване на тези знаци в цели числа, но вероятно това би било следващото нещо, което бих опитал.
РЕДАКТИРАНЕ:Още две предложения (добре е да видите конзолното приложение, между другото).
-
Посочете типа данни за параметъра, вместо просто да му давате обект. Например:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Помислете за използването на собствен драйвер на Oracle вместо вградения в .NET. Все пак може да пожелаете да направите това, тъй като по принцип се смята, че е по-бързо и по-надеждно, според мен.