c#과 오라클 간의 한글 전송이 제대로 되지 않습니다

paser2의 이미지

oledb를 사용해서 C#(클라이언트) <-> 오라클 서버 연동을 하고 있습니다
c# 프로그램에서는 쿼리문을 보내서 결과를 받고, update나 insert 등으로 입출력을 하고 있습니다.

windows 7 에서는 별 문제 없이 잘 동작하는데
xp에서는 이상하게 한글 오류가 뜹니다
영문자와 숫자를 빼면 전부다 ???로 뜹니다

읽기를 했을때 한글 부분은 죄다 ??로 뜨고
반대로 c#에서도 한글으로 입력한 부분은 서버에 ???로 저장되어 있습니다

Encoding enc = Encoding.GetEncoding("iso-2022-kr");
string sql = string.Format("INSERT into test values ('223', '犬32', '강아지32', 'rkddkwl32')", enc);

같은 방식으로 입력하는 sql문을 작성하였고, 아래의 인코딩 방식을 모두 시도해 보았으나 같은 결과만 나왔습니다
iso-2022-kr , x-cp20949 , x-EBCDIC-KoreanExtended , utf-32 , x-mac-korean , Johab , ks_c_5601-1987

레지스트리 편집을 통해서 oracle-NLS_LANG 필드의 데이터를 서버의 형식인 AMERICAN_AMERICA.KO16KSC5601로도 바꿔보았습니다
(원래는 KOREAN_KOREA.KO16MSWIN949 였습니다)

c#에서는 oledb를 사용해서 오라클 db를 호출하고 있으며, ODTwithODAC1120320_32bit 를 설치하였습니다. ODAC 중에서 가장 최신 버전이라고 생각되네요.
서버는 9.2.0.8.0이며 테스트중인 컴퓨터는 윈도우즈 xp 홈에디션 (sp3) 32bit 입니다

요약 : 윈도우 xp에서 오라클과 c#간에 한글을 제대로 주고 받을 수 있는 방법은 무엇인가요?

paser2의 이미지

레지스트리 편집구간에서 NLS_LANG 항목이 여러개가 있다고 하더군요
저는 하나만 있는줄 알고 HKEY_LOCAL_MACHINE - SOFTWARE - ORACLE의 항목만 수정했습니다
하위 항목도 있는걸 확인은 했는데 여건이 안되서 아직 테스트는 못했습니다

일단 확인은 좀 더 해봐야 될 듯 합니다
결과가 나오면 다시 댓글을 달겠습니다

여담인데 윈7은 윈xp와 같은 경로에 oracle 관련 레지스트리가 생기지 않는군요
64비트라서 그럴지도 모르겠지만요
현재 7에서는 문제가 없습니다만

paser2의 이미지

답변이 없어서 고생 많이 했네요. SQL은 기초밖에 못 쓰는 저한데는 많이 버거웠습니다.
혹여나 같은 문제가 생길 다른 분을 위해서 제가 푼 방식을 남겨두겠습니다.

기본적으로 인터넷에 많이 배포되어 있는 방법은 2단계입니다
1. 서버의 캐릭터셋 확인
2. 레지스트리 변경

SELECT VALUE FROM nls_database_parameters
위 sql 명령문을 사용하면 접속한 db의 몇몇 값들을 볼 수 있습니다
여기서 필요한 항목은

NLS_LANGUAGE
NLS_TERRITORY
NLS_CHARACTERSET

의 세가지가 필요합니다

레지스트리는 두군데를 수정해야 합니다
HEKY_LOCAL_MACHINES \ SOFTWARE \ ORACLE
HEKY_LOCAL_MACHINES \ SOFTWARE \ ORACLE \ HOME1
설치 상태에 따라서 약간 다를 수는 있습니다. XP인 제 가상피시에서는 저 위치에 있습니다

NLS_LANG 항목을 변경하면 되는데, 위에서 얻은 값이 필요합니다
예를 들어 위의 값이 이렇게 나왔다고 합시다
NLS_LANGUAGE : KOREAN
NLS_TERRITORY : KOREA
NLS_CHARACTERSET : KO16MSWIN949

그러면 NLS_LANG에는 다음과 같은 값을 넣어줍니다
KOREAN_KOREA.KO16MSWIN949
_(언더바)하고 .(마침표)로 연결해줍니다

근데 저는 여기서 안되었거든요
그래서 한 방법이

3. 환경변수에 등록

입니다.
환경변수에 대한 설명은 따로 하지 않겠습니다.
저는 환경변수(정확하게는 시스템 변수)에 새 항목을 추가해서 등록하니 해결이 되었습니다.
사용자 변수에서도 될지는 잘 모르겠습니다

여튼 새 항목 생성해서 변수명을 NLS_LANG으로 설정하고
값은 위의 값을 사용하면 됩니다.

그 이후부터 한글이 제대로 출력되더군요

다만 좀 의아한건 제 윈7 울티 64비트에서는 환경변수 설정도 하지 않았고
레지스트리 검색해보니
HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ORACLE
HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ ORACLE \ KEY_OraClient10g_home1
에 유효한 값을 가진 NLS_LANG이 있었는데 서버 설정과 전혀 달랐습니다

같은 프로그램을 사용했음에도 불구하고 이쪽에서는 문제없이 한글이 제대로 출력되었는데, 그 이유가 뭔지 잘 모르겠네요
그냥 7이 xp보다 좋아서 그런건지....

여튼 이번 문제는 이걸로 끝입니다

익명 사용자의 이미지

사랑합니다!!!! 덕분에 해결했습니다.

저같은 경우에는..... 기존의 프로그램 개발자들... 그 후에 소스 받은 SM인원들 모두가 정상적인데...

유독 저만 조회할경우 ora-01861: literal does not match format string 에러가 나더라구요... (조회기간 들어간 곳만 저 에러가 났습니다)

이 에러 해결하려고... 한 3일 찾은거 같습니다.

인터넷 찾아보면 대부분 형식 에러라고.. TO_DATE 함수쪽 수정하면 된다고 하는데.. 수정하면 물론 되긴합니다만, 기존 소스 수백개 수정하기도 힘들고 기존의 개발자들은 모두 아무 이상이 없었기 때문에

제 설정이 뭔가 안맞는거다. 생각이 들어서 찾고 있었거든요.

레스트리만 죽어라 수정해보고 있었는데... 님과 같이 사용자 환경변수 시스템에도 추가해주니까 됩니다!! 우와!!!

여튼 제가 지금까지 찾아본걸로 해보면 아래의 설정대로 나온걸로 레지스트리와 환경변수 설정을 동일하게 해주면 되는것 같습니다.
select * from v$nls_parameters;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.