Background Image

FORUM

조회 수 13377 추천 수 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
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 49
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
934 Spring Boot 2+ JDBC DB Connection pool 오류 3 daniel 2019.11.05 2686
933 큐브리드에 있는 sql데이터를 다른사이트에 표출하는방법 3 꼴통개발자 2019.11.05 180
932 cubrid.conf 설정 질문 드립니다. 2 지옥성녀은비 2019.11.12 538
931 MSSQL -> CUBRID MIGRATION 1 현수 2019.11.15 219
930 elastic logstash에서 JDBC로 CUBRID를 연결하는데 계속해서 실패합니다 1 제냐 2019.11.18 1077
929 Spring boot 2.1.9, Spring Data Jpa 연동이 가능한지 문의드립니다. 1 금룔 2019.11.28 1566
928 컬럼 코멘트 입력 3 그리피 2019.12.09 2569
927 DB 계정 리스트 생성 시 계정 생성일이나 변경일을 알 수 없나요? 1 시나브로72 2019.12.09 286
926 busy 쿼리 자동 종료 문의 2 우동 2019.12.11 223
925 query_editor._sql.log 관련 문의 드립니다. 1 ldev27 2019.12.12 136
924 HA환경 JDBC URL 관련하여 질문드립니다. 2 cubridtest 2019.12.19 1165
923 큐브리드 10.2 버전이 설치가 되지 않습니다. 1 file 종이 2019.12.24 215
922 대량 데이터 INSERT 1 그리피 2019.12.24 1148
921 CUBRID ODBC 오류 문의드립니다 2 Kim 2019.12.26 669
920 큐브리드 HA 구성 후 재기동 절차 관련 질문입니다 1 강성현 2019.12.27 326
919 테스트 서버와 운영서버에 COUNT(*) 쿼리 실행 속도 차이 문의 1 종이 2019.12.29 382
918 CUBRID-JDBC-9.3.2.0016 드라이버 관련 os 호환이 되는지 문의드려요 1 dkkdkdkdkdk 2019.12.30 173
917 CUBRID 10.1.3 COMMENT 추가 방법 문의 3 박종원 2020.01.06 1164
916 큐브리드 버전 문의입니다. 1 행복한이니 2020.01.07 289
915 Cannot communicate with the broker or received invalid packet 오류 문의 드립니다 1 file Kim 2020.01.09 1170
Board Pagination Prev 1 ... 149 150 151 152 153 154 155 156 157 158 ... 200 Next
/ 200

Contact Cubrid

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