Jeg kan se fem potentielle områder med problemer:
-
Hvordan får du egentlig teksten ind i din .NET-applikation? Hvis det er hårdkodet i en streng-literal, er du så sikker på, at compileren antager den rigtige kodning for din kildefil?
-
Der kan være et problem med, hvordan du sender det til databasen.
-
Der kan være et problem med, hvordan det bliver gemt i databasen.
-
Der kan være et problem med, hvordan du henter det i databasen.
-
Der kan være et problem med, hvordan du viser det igen bagefter.
Nu lyder områder 2-4, som om de er mindre tilbøjelige til at være et problem end 1 og 5. Hvordan viser du teksten bagefter? Henter du det faktisk ud af databasen i .NET, eller bruger du Toad eller noget lignende til at prøve at se det?
Hvis du skriver det ud igen fra .NET, foreslår jeg, at du springer databasen helt over - hvis du bare viser selve strengen, hvad ser du så?
Jeg har en artikel, som du måske kan finde nyttig om fejlretning af Unicode-problemer. Koncentrer dig især om hvert sted, hvor kodningen kunne går galt, og sørg for, at når du "viser" en streng, dumper du de nøjagtige Unicode-tegn ud (som heltal), så du kan kontrollere dem i stedet for blot hvad din nuværende skrifttype ønsker at vise.
EDIT:Okay, så databasen er involveret et eller andet sted i problemet.
Jeg stærkt foreslå, at du fjerner noget som ASP og HTML ud af ligningen. Skriv en simpel konsol-app, der intet gør men indsæt snoren og hent den igen. Få det til at dumpe de individuelle Unicode-tegn (som heltal) før og efter. Prøv derefter at se, hvad der er i databasen (f.eks. ved at bruge Toad). Jeg kender ikke Oracle-funktionerne til at konvertere strenge til sekvenser af individuelle Unicode-tegn og derefter konvertere disse tegn til heltal, men det ville muligvis være det næste, jeg ville prøve.
EDIT:To forslag mere (godt at se konsolappen, btw).
-
Angiv datatypen for parameteren i stedet for blot at give den et objekt. For eksempel:
command.Parameters.Add (":UnicodeString", OracleType.NVarChar).Value = stringToSave;
-
Overvej at bruge Oracles egen driver i stedet for den, der er indbygget i .NET. Du ønsker måske at gøre dette alligevel, da det generelt anses for at være hurtigere og mere pålideligt, tror jeg.