Background Image

FORUM

조회 수 13371 추천 수 0 댓글 12
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

ADO.net 을 이용하여 C# 에서 select 를 하는데.


한글로 where 조건을 주면 select의 결과가 나오지 않습니다. 


매니져에서 문제가 없는 커리문이 c#코드에서는 결과가 나오지 않더군요..


SELECT * FROM member WHERE user_name='아무개';  이런 커리문이 매니져에서는 문제가 없으나 C#에서는 


결과가 나오지 않습니다. 



그래서 일단 ODBC를 설정해서 다시 해봣는데


ERROR [HY000] [CUBRID][ODBC CUBRID Driver][-1006]Server handle not found

ERROR [01000] [CUBRID][ODBC CUBRID Driver][0]Fetch error


이런 에러가 발생되네요... 이건 어떻게하나요..

  • ?
    샤롱스판 2012.03.20 02:34
    cubrid.conf에서 아래 파라미터를 yes로 설정하시고 재시작하신 후 쿼리를 실행해보시기 바랍니다. http://www.cubrid.org/manual/ko/8.4.4/admin/config.html#cubrid-conf 를 참고하세요~

    single_byte_compare은 문자열 비교(string compare)를 1바이트 단위로 수행하기 위한 파라미터이다. 기본값인 no로 설정하면 2바이트 단위로 문자열 비교를 수행한다. yes로 설정하면 1바이트 단위로 문자열 비교를 수행하므로 유니코드(UTF-8) 환경에서 저장된 데이터에 대해 정상적으로 문자열 비교/검색을 수행할 수 있다.

     

  • ?
    세스카 2012.03.20 04:05

    이미 설정해 있습니다.. 본문에서도 있듯이 매니져에서는 문제가 없는 커리문이 C#에서만 문제를 보인다는겁니다....


  • ?
    샤롱스판 2012.03.20 05:31

    큐브리드 DB에 데이터를 입력했을 때의 문자셋과, DB에서 데이터를 출력할 때의 문자셋이 같아야 합니다. CM에서 잘 보이신다면 CM -JDBC 드라이버에 설정된 문자셋과 DB에 저장된 데이터의 문자셋이 일치한다는 것을 의미하구요. C# 응용에서는 문자셋이 어떻게 설정되어 있는지 확인이 필요합니다.

  • ?
    세스카 2012.03.20 05:55

    왜인지 모르겟네요. DB에서 UTF-8 이라서 CM에서 UTF-8로 되어 있으니 당연히 안깨지네요.

    C#에서는 Encoding.Default 문자셋을 UTF-8로 변환하여 쿼리를 보내고 

    받을때도 UTF-8을 Encoding.Default로 변환하여 보는데도 한글이 깨지는 현상이 일어나네요..


    커리문이 깨져서 결과도 안나오고, 결과값도 깨지는 전형적인 문자셋 문제인데.. 변환을 해도 안되니.. 이상하네요;


    string sql = "SELECT * from member";
                
                //ADO.NET
                
                byte[] data_query = Encoding.Default.GetBytes(sql);
                using (CUBRIDCommand cmd = new CUBRIDCommand(Encoding.GetEncoding("UTF-8").GetString(data_query), DBConn))
                {
                    using (DbDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes(reader.GetString(6));
                            string str = Encoding.Default.GetString(bytes);
                        }             
          
                    }
                }

  • ?
    남재우 2012.03.20 07:14

    안녕하세요.

    일단 조건없이 질의하면 결과는 제대로 나오는 것이죠? 그리고 조건을 한글 말고 영문으로, 즉 본문에 영문이 있는 것에 대하여 영문으로 검색하면 결과가 제대로 나오는지 궁금합니다.

    지금 문의하신 내용이 처음 질문의 ODBC 에러와 관련이 있다면 질의 자체에 에러가 있는 것으로 보이고요, 그렇지 않고 ODBC 에러는 없이 결과가 나오지 않는다면 다른 문제인 것 같습니다.

    질의를 수행하신후 바로 %CUBRID%logbrokersql_log 아래에 보시면 가장 최근에 쓰여진 화일이 있을 것이고, 그화일을 열어 끝 부분을 보시면 수행하신 질의문이 보일 것입니다. 그부분 부터 로그 화일의 끝 부분까지 올려주시면 확인해 보도록 하겠습니다.

  • ?
    세스카 2012.03.20 18:59
    로그를 확인했는데 확실히 이상하네요. 문자셋 변환을 안해주는것도 아니고

    //C# 에서 ADO.net을 이용하여 "SELECT * from xe_member"; 실행시
    //출력값이 깨짐.

    03/20 09:48:49.074 (0) CLIENT IP 1.1.1.1
    03/20 09:48:49.089 (0) connect db xe_sangdo user artvic url jdbc:cubrid:localhost:30000:demodb:public:: session id 16140
    03/20 09:48:49.089 (0) DEFAULT isolation_level 3, lock_timeout -1
    03/20 09:48:49.105 (0) get_version
    03/20 09:48:49.105 (0) auto_commit
    03/20 09:48:49.105 (0) auto_commit 0
    03/20 09:48:49.105 (0) *** elapsed time 0.016

    03/20 09:48:49.183 (0) set_db_parameter auto_commit 1
    03/20 09:48:49.214 (15927) prepare 0 SELECT * from xe_member
    03/20 09:48:49.230 (15927) prepare srv_h_id 1 (PC)
    03/20 09:48:49.230 (15927) set query timeout to 0 (no limit)
    03/20 09:48:49.230 (15927) execute srv_h_id 1 SELECT * from xe_member
    03/20 09:48:49.230 (15927) execute 0 tuple 6 time 0.000
    03/20 09:48:49.230 (0) auto_commit
    03/20 09:48:49.230 (0) auto_commit 0
    03/20 09:48:49.230 (0) *** elapsed time 0.016

    03/20 09:49:00.150 (15927) next_result 1 
    03/20 09:49:00.181 (15927) close_req_handle srv_h_id 1
    03/20 09:49:00.181 (0) con_close
    03/20 09:49:00.181 (0) disconnect

    03/20 09:49:00.181 (0) STATE idle

    03/20 09:52:05.791 (0) CLIENT IP 1.1.1.1
    03/20 09:52:05.807 (0) connect db xe_sangdo user artvic url jdbc:cubrid:112.220.109.250:30000:xe_sangdo:artvic:: session id 16183
    03/20 09:52:05.807 (0) DEFAULT isolation_level 3, lock_timeout -1
    03/20 09:52:05.838 (0) get_version
    03/20 09:52:05.838 (0) auto_commit
    03/20 09:52:05.838 (0) auto_commit 0
    03/20 09:52:05.838 (0) *** elapsed time 0.031



    //CM에서 "SELECT * FROM xe_member WHERE user_id = '강긔남'"; 실행시
    //정상적인 select 및 출력

    03/20 09:52:05.838 (0) check_cas 0
    03/20 09:52:05.853 (0) set_db_parameter lock_timeout 1000
    03/20 09:52:18.848 (0) check_cas 0
    03/20 09:52:18.864 (0) get_db_parameter isolation_level 3
    03/20 09:52:18.895 (10) prepare 2 SELECT * FROM xe_member WHERE user_id = '媛뺢툝??
    03/20 09:52:18.895 (10) prepare srv_h_id 1
    03/20 09:52:18.957 (10) set query timeout to 0 (no limit)
    03/20 09:52:18.957 (10) execute srv_h_id 1 SELECT * FROM xe_member WHERE user_id = '媛뺢툝??
    03/20 09:52:18.957 (10) execute 0 tuple 0 time 0.000
    03/20 09:52:19.020 (0) end_tran COMMIT
    03/20 09:52:19.020 (0) end_tran 0 time 0.000
    03/20 09:52:19.020 (0) *** elapsed time 0.125

    03/20 09:52:30.751 (0) check_cas 0
    03/20 09:52:30.767 (0) get_db_parameter isolation_level 3
    03/20 09:52:30.767 (0) close_req_handle srv_h_id 1
    03/20 09:52:30.767 (11) prepare 2 SELECT * FROM xe_member WHERE user_name = '媛뺢툝??
    03/20 09:52:30.767 (11) prepare srv_h_id 1 (PC)
    03/20 09:52:30.798 (11) set query timeout to 0 (no limit)
    03/20 09:52:30.798 (11) execute srv_h_id 1 SELECT * FROM xe_member WHERE user_name = '媛뺢툝??
    03/20 09:52:30.798 (11) execute 0 tuple 1 time 0.000
    03/20 09:52:30.814 (0) end_tran COMMIT
    03/20 09:52:30.814 (0) end_tran 0 time 0.000
    03/20 09:52:30.814 (0) *** elapsed time 0.047

    03/20 09:52:30.814 (0) END OF LOG



    //C# 에서 ADO.net을 이용하여 "SELECT * FROM xe_member WHERE user_id = '강긔남'"; 실행시
    // select 가 안됨.

    03/20 09:53:51.154 (0) CLIENT IP 1.1.1.1
    03/20 09:53:51.170 (0) connect db xe_sangdo user artvic url jdbc:cubrid:localhost:30000:demodb:public:: session id 16204
    03/20 09:53:51.170 (0) DEFAULT isolation_level 3, lock_timeout -1
    03/20 09:53:51.185 (0) get_version
    03/20 09:53:51.185 (0) auto_commit
    03/20 09:53:51.185 (0) auto_commit 0
    03/20 09:53:51.185 (0) *** elapsed time 0.015

    03/20 09:53:51.185 (0) set_db_parameter auto_commit 1
    03/20 09:53:51.201 (15928) prepare 0 SELECT * FROM xe_member WHERE user_id = '????'
    03/20 09:53:51.201 (15928) prepare srv_h_id 1
    03/20 09:53:51.232 (15928) set query timeout to 0 (no limit)
    03/20 09:53:51.232 (15928) execute srv_h_id 1 SELECT * FROM xe_member WHERE user_id = '????'
    03/20 09:53:51.232 (15928) execute 0 tuple 0 time 0.000
    03/20 09:53:51.232 (0) auto_commit
    03/20 09:53:51.232 (0) auto_commit 0
    03/20 09:53:51.232 (0) *** elapsed time 0.031

    03/20 09:53:51.232 (15928) next_result 1 
    03/20 09:53:51.248 (15928) close_req_handle srv_h_id 1
    03/20 09:53:51.248 (0) con_close
    03/20 09:53:51.248 (0) disconnect

    03/20 09:53:51.248 (0) STATE idle



  • ?
    남재우 2012.03.20 19:17

    조건없이 질의시 결과가 깨져나온다면 일단 그 문제부터 해결하는 것이 중요해보입니다.  입출력과정 중 어디선가 문자셑이 깨지고 있으니 그 문제가 해결된다면 조건 검색시 제대로 결과가 나올 것입니다.

    CUBRID에서는 문자셑에 대한 변환을 하지 않습니다. 따라서 일단 인코딩하지 않고 입출력을 해보면서 어느부분에서 문제가 있는지를 찾아보시는 것이 좋겠습니다.

  • ?
    cgkang 2012.03.20 19:19

    odbc에서 connection string에 charset을 지정했을 경우

    윈도우의 디폴트 코드셋으로 입력된 스트링을 지정된 charset으로 변환해 주거나, 반대로 변환해서 반환합니다.

     

    다음 예와 같이 charset이 추가되었는지 확인해보시기 바랍니다. 현재는 utf-8만 지원합니다.

    DRIVER=CUBRID Driver;UID=public;FETCH_SIZE=100;PORT=30000;SERVER=localhost;DB_NAME=demodb;charset=utf-8

  • ?
    세스카 2012.03.21 01:03

    답변주셔서 감사합니다.

    일단 ODBC로 변경하여 다시 만드는중입니다 드라이버 자체에 문자셋 설정이 없고

    C# 자체에 byte배열로는 UTF-8이 가능하지만 string로는 안되는것 같더군요...

    그래서 안되는것 같고 

    ODBC는 드라이버 자체에 문자셋이 있으니 가능할것같습니다.

  • ?
    샤롱스판 2012.03.21 20:34

    불편 드려서 죄송합니다. ado.net driver 자체에서 charset 설정에 문제 있다는 것을 파악했구요, 현재 개발자가 작업 중입니다. 드라이버 패치 나오면 알려드리도록 하겠습니다.

  • ?
    샤롱스판 2012.03.24 02:37

    ftp://ftp.cubrid.org/CUBRID_Drivers/ADO.NET_Driver/8.4.1/CUBRID%20ADO.NET%20Data%20Provider%208.4.1.1-Developing.zip 

    현재 ado.net 드라이버  charset 설정 관련 코드를 긴급 수정하였는데요(개발용), 혹시 이것으로 해당 문제가 해결되는지 테스트 가능하실까요? 저희가 개발자 단위 테스트는 했고 QA는 아직 못했습니다. QA마치고 패치를 릴리스하려고 합니다.

    connection string을 아래처럼 설정하시면 됩니다.

    server=localhost;database=demodb;port=33000;user=public;password=;charset=utf-8

     

     

  • ?
    문진영 2012.03.26 23:26

    해당 문제가 이상없이 한글로 출력 되었습니다.

    감사합니다 ^^

     


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4246
» ADO.net 또는 ODBC에 대한 질문입니다. 12 세스카 2012.03.20 13371
1175 win 2008 (x64)에서 apm으로 큐브리드 연동 질문 1 hwani012 2012.03.16 7666
1174 윈도우용 큐브리드 문의 1 zino 2012.03.13 6355
1173 큐브리드상에서 한글을 깨지지 않고 자르는 방법이 있을까요? 1 file 안지민 2012.03.13 9325
1172 8.2.2 HA 구성 중 네트워크 장애 복귀 시 role 전환 문제 3 freemir 2012.03.09 13431
1171 설치 문의 드립니다. 1 cuins 2012.03.06 7532
1170 php 모듈 관련 문제좀여... 5 눈뜨면아침 2012.03.01 7126
1169 HA 구성 하에서 RO 브로커 연결 시 SELECT 값이 다릅니다. 9 freemir 2012.02.24 22375
1168 server start시 error 발생 관련 3 flypig 2012.02.24 12075
1167 질문입니다. 1 세스카 2012.02.22 7109
1166 큐브리드 매니져에서만 오류메시지가 깨집니다. 1 file 안지민 2012.02.21 9711
1165 트리거 조건문 질문. 4 기린종인 2012.02.19 8707
1164 잦은 트랜잭션으로 인한 마스터서버의 다운 문제. 6 노랑배 2012.02.16 14659
1163 ADO.NET 을 비쥬얼 스튜디오에 연결하기... 4 희나람 2012.02.12 11728
1162 브로커 HA 관련 문의 6 freemir 2012.02.10 19668
1161 초기비번 2 file bj 2012.02.10 8613
1160 Java VM is not running 오류 원인? 6 file 강나루소나무 2012.02.10 15657
1159 ADO.NET 드라이버 집합형 데이터 지원 2 소라게 2012.02.09 39855
1158 cubrid install 후 생성되는 demodb 정보에관해 1 강서꽃미남 2012.02.08 40990
1157 password file open error 라고 뜨면서 큐브리드 매니저 접속이 안되요 1 secret 왕꿈틀이 2012.02.08 20
Board Pagination Prev 1 ... 136 137 138 139 140 141 142 143 144 145 ... 199 Next
/ 199

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales