Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: System.Data.OracleClient - giną polskie literki :)

Witam,
problem jest następujący: czytam sobie z tabel Oracle wyniki selectów za pomocą DataReadera. No i wszystko działa OK za wyjątkiem jednej rzeczy: "gubią" się polskie literki :( , a konkretniej zamieniają się na "odpowiedniki" ascii, czyli jeśli w kolumnie tabeli mam "płomień", to datareader zwraca mi "plomien".
Co ciekawe, zarówno małe, jak i duże 'ó' przechodzi, czyli jeśli w kolumnie tabeli jest "żółw", to datareader zwraca mi "zólw".

Garść konkretów:
1. Baza Oracle 11 (chyba z jakąś literką - tego nie wiem, bo baza nie jest moja, tylko klienta). Nie mam pojęcia, jakie jest kodowanie w bazie (jak to sprawdzić?).
2. Piszę w C#, .NET 2.0, MSVS 2008
3. Mam zainstalowanego w systemie klienta OracleXEClient v.11, ale używam System.Data.OracleClient z .NET Framework (z tego, co jednak widzę, korzysta on z niektórych bibliotek OracleXEClient).
4. Czytam pola standardowymi metodami.

Co ciekawe, kiedy łączę się w analogiczny sposób z różnymi bazami MSSQL z rozmaicie ustawionymi stronami kodowymi, działa to zawsze dobrze. Natomiast z Oracle wyraźnie gdzieś następuje zmiana kodowania.

Macie jakiś pomysł???
Wojciech Z.

Wojciech Z. Konsultant
IT/Biznesowy

Temat: System.Data.OracleClient - giną polskie literki :)

"Ó" się wyświetla bo jest w ascii
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: System.Data.OracleClient - giną polskie literki :)

No domyślam się :) Ale zastanawiam się cały czas, ki diabeł każe konwertować mu ciągi znaków na "pure ASCII" - bo ja mu nie kazałem :)Piotr G. edytował(a) ten post dnia 11.05.10 o godzinie 19:07
Tomasz Poradowski

Tomasz Poradowski Specjalista od
wytwarzania
oprogramowania

Temat: System.Data.OracleClient - giną polskie literki :)

Piotr G.:
1. Baza Oracle 11 (chyba z jakąś literką - tego nie wiem, bo baza nie jest moja, tylko klienta). Nie mam pojęcia, jakie jest kodowanie w bazie (jak to sprawdzić?).

SELECT * FROM v$nls_parameters

i szukaj "NLS_CHARACTERSET". Standardowo Oracle lubi używać Latin1 z tego co pamiętam, co by się zgadzało z tym co dostajesz. Trochę więcej o NLS_LANG możesz poczytać tutaj, a dodatkowo poszukaj w dokumentacji o regułach automatycznej konwersji zestawów znaków ze względu na ustawienia serwera + klienta.

konto usunięte

Temat: System.Data.OracleClient - giną polskie literki :)

Normalnie powinno właśnie pomóc ustawienie NLS_LANG w ramach sesji

ALTER SESSION SET NLS_LANGUAGE = POLISH;
ALTER SESSION SET NLS_TERRITORY = POLAND;
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: System.Data.OracleClient - giną polskie literki :)

'SELECT * FROM v$nls_parameters' zwraca m.in:

NLS_LANGUAGE = POLISH
NLS_TERRITORY = POLAND
...
NLS_CHARACTERSET = EE8MSWIN1250
...
NLS_NCHAR_CHARACTERSET = AL16UTF16
...

ale to ostatnie to chyba nieistotne, nie?

Czy w tym EE8MSWIN1250 jest przyczyna? Jeśli tak, to czy da się to jakoś przekonwertować po stronie C# już? Albo ustawić inaczej (właściwie) na poziomie zapinania połączenia do ORACLE ?

Temat: System.Data.OracleClient - giną polskie literki :)

Sprawdź rejestr (po stronie klienta, nie bazy)
co masz ustawione dla NLS_LANG
ja mam: POLISH_POLAND.EE8MSWIN1250
ale jak będzie inny charset zamiast WIN1250 to mogą być takie efekty.Piotr Wolański edytował(a) ten post dnia 13.05.10 o godzinie 17:45
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: System.Data.OracleClient - giną polskie literki :)

Cześć, Piotrek!
Mam tak samo :(

Temat: System.Data.OracleClient - giną polskie literki :)

Kiedyś podobny efekt otrzymałem stosując:
US7ASCII lub US8PC437

Czy jeżeli uruchomisz to zapytanie w SQLPlus
to polskie znaki są prawidłowe ?

Czy masz może zainstalowanego Lightweight Instant Client
(jeżeli tak to tam PLiterki to chyba tylko w UTF ) ?
W pełnej wersji klienta powinno być OK.

Czu masz tylko jeden ORA_HOME na kliecie?

Nie jestem pewien, czy w plikach konfiguracyjnych drivera Oracle
do C# nie jest dodatkowo ustawiany character set.

Następna dyskusja:

System.Data.OracleClient i ...




Wyślij zaproszenie do