:meta-keywords: cubrid oledb driver, cubrid ole db driver, cubrid oledb api, cubrid ole db api, oledb programming :meta-description: CUBRID OLE DB driver is based on CCI API and provides an interface over .NET Framework using the Component Object Model (COM). *************** OLE DB 드ë¼ì´ë²„ *************** OLE DB(Object Linking and Embedding, Database)는 Microsoftì—서 개발한 COM(Component Object Model) 기반 ì¸í„°íŽ˜ì´ìŠ¤ë¡œ, ë°ì´í„°ê°€ ì €ìž¥ëœ í˜•ì‹ì— ìƒê´€ì—†ì´ ë°ì´í„°ì— ì ‘ê·¼í• ìˆ˜ 있는 ì¼ë°˜ì ì¸ ë°©ë²•ì„ ì œê³µí•œë‹¤. .NET í”„ë ˆìž„ì›Œí¬ëŠ” Windows ì‘ìš© 프로그램 ê°œë°œì„ ìœ„í•œ í”„ë ˆìž„ì›Œí¬ë¡œ, 언어 ê°„ ìƒí˜¸ ìš´ìš©ì„±ì„ ì§€ì›í•œë‹¤. .NETì´ ì§€ì›í•˜ëŠ” ëª¨ë“ í”„ë¡œê·¸ëž˜ë° ì–¸ì–´ëŠ” .NET ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì‚¬ìš©í• ìˆ˜ 있다. .NET í”„ë ˆìž„ì›Œí¬ì˜ ë°ì´í„° 공급ìžëŠ” ë°ì´í„°ë² ì´ìŠ¤ì— ì—°ê²°í•˜ê³ ëª…ë ¹ì„ ì‹¤í–‰í•˜ë©° 결과를 검색하는 ë° ì‚¬ìš©ëœë‹¤. CUBRID OLE DB 드ë¼ì´ë²„는 CCI API를 기반으로 작성ë˜ì—ˆìœ¼ë¯€ë¡œ, CCI API ë° CCIì— ì ìš©ë˜ëŠ” **CCI_DEFAULT_AUTOCOMMIT** ê³¼ ê°™ì€ ì„¤ì • 파ë¼ë¯¸í„°ì— ì˜í–¥ì„ 받는다. .. FIXME: 별ë„로 OLE DB 드ë¼ì´ë²„를 다운로드하거나 OLE DB 드ë¼ì´ë²„ì— ëŒ€í•œ ìµœì‹ ì •ë³´ë¥¼ 확ì¸í•˜ë ¤ë©´ http://www.cubrid.org/wiki_apis/entry/cubrid-oledb-driver\ ì— ì ‘ì†í•œë‹¤. .. note:: * CUBRID OLEDB 드ë¼ì´ë²„ ë²„ì „ì´ 9.1.0.p1 ì´ìƒì´ë©´, 32비트와 64비트 통합 설치 패키지 하나만 설치하면 ëœë‹¤. ì´ ì¸ìŠ¤í†¨ëŸ¬ëŠ” CUBRID DB 엔진 2008 R4.1 ì´ìƒ ë²„ì „ì„ ì§€ì›í•œë‹¤. * CUBRID OLEDB 드ë¼ì´ë²„ ë²„ì „ì´ 9.1.0 ì´í•˜ì´ë©´, 64비트 OSì—서 ë¬¸ì œê°€ ë°œìƒí• 수 있다. .. FIXME: Please see our installation tutorial for an old version: http://www.cubrid.org/wiki_apis/entry/cubrid-oledb-driver-installation-instructions-old OLE DB 설치 ë° ì„¤ì • =================== **CUBRID OLE DB 공급ìž** CUBRID를 ì´ìš©í•˜ëŠ” ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ê°œë°œí•˜ë ¤ë©´ CUBRID OLE DB ê³µê¸‰ìž ë“œë¼ì´ë²„( **CUBRIDProvider.dll** )ê°€ 필요하다. 드ë¼ì´ë²„ 파ì¼ì„ ì–»ìœ¼ë ¤ë©´ ë‹¤ìŒ ì¤‘ 하나를 수행한다. * **드ë¼ì´ë²„ 설치하기**: CUBRID OLED DB Data Provider Installerì˜ .exe 파ì¼ì„ http://ftp.cubrid.org/CUBRID_Drivers/OLEDB_Driver/ 위치ì—서 ë‚´ë ¤ë°›ì•„ 실행한다. OLE DB 드ë¼ì´ë²„ 9.1.0.p1 ì´ìƒ ë²„ì „(CUBRID 서버 2008 R4.1부터 ì´ ë“œë¼ì´ë²„ 사용 가능)부터는 ë‹¤ìš´ë°›ì€ íŒŒì¼ì„ 실행하면 32비트와 64비트 둘 다 설치ëœë‹¤. .. image:: /images/oledb_install.jpg * ì„¤ì¹˜ëœ ë””ë ‰í„°ë¦¬ì—는 ë‹¤ìŒ íŒŒì¼ì´ 존재한다. * CUBRIDProvider32.dll * CUBRIDProvider64.dll * README.txt * uninstall.exe * **소스 코드ì—서 빌드하기**: CUBRID OLED DB Data Provider Installer를 ë³€ê²½í•˜ê³ ì‹¶ìœ¼ë©´ 소스 코드를 컴파ì¼í•˜ì—¬ ì§ì ‘ CUBRID OLED DB Data Provider Installer를 ë¹Œë“œí• ìˆ˜ 있다. ìžì„¸í•œ ë‚´ìš©ì€ ë‹¤ìŒ ì£¼ì†Œë¥¼ ì°¸ê³ í•œë‹¤. .. FIXME: For details, see below: .. FIXME: http://www.cubrid.org/wiki_apis/entry/compiling-the-cubrid-ole-db-installer CUBRID OLED DB Data Provider Installer를 ì´ìš©í•˜ì§€ 않는 경우ì—는 ìš´ì˜ì²´ì œ ë²„ì „ì— ë”°ë¼ ë‹¤ìŒ ëª…ë ¹ì–´ë¥¼ 실행하여 드ë¼ì´ë²„를 등ë¡í•´ì•¼ 한다. ì´ë•Œ 32비트 Windowsì—서는 **C:\Windows\system32** ë””ë ‰í„°ë¦¬ì˜ regsvr32ê°€ 실행ë˜ì–´ì•¼ í•˜ê³ , 64비트 Windowsì—서는 **C:\Windows\SysWOW64** ë””ë ‰í„°ë¦¬ì˜ regsvr32ê°€ 실행ë˜ì–´ì•¼ 한다. :: regsvr32 CUBRIDProvider.dll OLE DB í”„ë¡œê·¸ëž˜ë° ================= ë°ì´í„° ì—°ê²° ì†ì„± 대화 ìƒìž 사용 ------------------------------- Visual Studio .NETì—서 대화 ìƒìžì— ì ‘ê·¼í•˜ê¸° 위해, "ë„구" 메뉴ì—서 "ë°ì´í„°ë² ì´ìФ ì—°ê²°"ì„ ì„ íƒí•˜ê±°ë‚˜ Server Explorerì— ìžˆëŠ” "ë°ì´í„°ë² ì´ìФ ì—°ê²°" ì•„ì´ì½˜ì„ í´ë¦í•œë‹¤. * ë¨¼ì € Visual Studio를 설치한 후, "ë°ì´í„°ë² ì´ìФ ì—°ê²°"ì„ í´ë¦í•œë‹¤. .. image:: /images/oledb_1_connect.jpg * Data source로 <other>를 ì„ íƒí•˜ê³ , Data Provider로 .Net Framework Data Provider for OLE DB를 ì„ íƒí•œë‹¤. ê·¸ë¦¬ê³ ë‚˜ì„œ "계ì†" ë²„íŠ¼ì„ í´ë¦í•œë‹¤. .. image:: /images/oledb_2_select.jpg * CUBRID OLEDB Provider를 ì„ íƒí•˜ê³ "ë°ì´í„° ì—°ê²°" ë²„íŠ¼ì„ í´ë¦í•œë‹¤. .. image:: /images/oledb_3_datalink.jpg * ì •ë³´ë¥¼ ì±„ìš°ê³ "ì—°ê²° 테스트" ë²„íŠ¼ì„ í´ë¦í•œë‹¤. ì—°ê²°ì— ì„±ê³µí•˜ë©´, 성공했다는 대화 ìƒìžê°€ íŒì—…ëœë‹¤. 보다 ìžì„¸í•œ ì„¤ëª…ì€ MSDNì— ìžˆëŠ” `https://docs.microsoft.com/en-us/previous-versions/79t8s5dk(v=vs.90) <https://docs.microsoft.com/en-us/previous-versions/79t8s5dk(v=vs.90)>`_ ì„ ì°¸ê³ í•œë‹¤. .. image:: /images/oledb_4_confconn.jpg ë˜ëŠ” ìœˆë„ íƒìƒ‰ê¸°ì—서 universal data link(.udl) 파ì¼ì„ ë”블 í´ë¦í•˜ì—¬ 해당 대화 ìƒìžë¥¼ ì—´ 수 있다. * ë¨¼ì € ìž„ì˜ì˜ í…스트 파ì¼ì„ ë§Œë“¤ê³ í™•ìž¥ìžë¥¼ .udl로 변경한다(1.txt -> 1.udl). 다ìŒìœ¼ë¡œ, 1.udlì„ í´ë¦í•˜ë©´ ì•„ëž˜ì˜ ëŒ€í™” ìƒìžê°€ íŒì—…ëœë‹¤. ì´ ë•Œ, 공급ìž(Provider)를 CUBRID OLE DB Provider로 변경한다. .. image:: /images/oledb_confbox.jpg * 문ìžì…‹ ì„¤ì • universal data link(.udl) 파ì¼ì„ í…스트 편집기로 ì—´ë©´ 아래와 ê°™ì´ ë‚˜íƒ€ë‚˜ëŠ”ë°, "Charset=utf-8;"ì´ ë¬¸ìžì…‹ì„ ì„¤ì •í•˜ëŠ” 부분ì´ë‹¤. "Provider=CUBRIDProvider;Data Source=demodb;Location=127.0.0.1;User ID=dba;Password=;Port=33000;Fetch Size=100;Charset=utf-8;" * 격리 수준 ì„¤ì • 아래 문ìžì—´ì—서 "Autocommit Isolation Levels=256;"ì´ ê²©ë¦¬ 수준(isolation level)ì„ ì„¤ì •í•˜ëŠ” 부분ì´ë‹¤. ì´ ê¸°ëŠ¥ì€ ë“œë¼ì´ë²„ ë²„ì „ 9.1.0.p2 ì´ìƒì—서만 ì§€ì›í•˜ë©°, ì—°ê²° 문ìžì—´ì—서 ì§€ì •í•˜ì§€ 않으면 4096ì„ ê¸°ë³¸ìœ¼ë¡œ ì§€ì •í•œë‹¤. :: "Provider=CUBRIDProvider;Data Source=demodb;Location=10.34.64.104;User ID=dba;Password=;Port=30000;Fetch Size=100;Charset=utf-8;Autocommit Isolation Levels=256;" +--------------------------------+-------------------------------------+---------+ | OLE DB | CUBRID | Value | +================================+=====================================+=========+ | ISOLATIONLEVEL_READUNCOMMITTED | TRAN_COMMIT_CLASS_UNCOMMIT_INSTANCE | 256 | +--------------------------------+-------------------------------------+---------+ | ISOLATIONLEVEL_READCOMMITTED | TRAN_COMMIT_CLASS_COMMIT_INSTANCE | 4096 | +--------------------------------+-------------------------------------+---------+ | ISOLATIONLEVEL_REPEATABLEREAD | TRAN_REP_CLASS_REP_INSTANCE | 65536 | +--------------------------------+-------------------------------------+---------+ | ISOLATIONLEVEL_SERIALIZABLE | TRAN_SERIALIZABLE | 1048576 | +--------------------------------+-------------------------------------+---------+ note:: CUBRID OLE DBì—서 "Autocommit Isolation Levels"ì€ ì—°ê²° 문ìžì—´ì—서만 ì§€ì • 가능하며, 트랜ìžì…˜ì—서는 ì§€ì • 불가하다. 즉, OleDbConnection.BeginTransaction() 함수ì—서 isolation levelì„ ë³€ê²½í•´ë„ ì ìš©ë˜ì§€ 않는다. ì—°ê²° 문ìžì—´(connection string) 구성 ----------------------------------- CUBRID OLE DB Provider로 프로그래ë°ì„ í• ë•Œ ì—°ê²° 문ìžì—´(connection string)ì˜ ì†ì„±ì€ 다ìŒê³¼ 같다. +-----------------------------+----------------+---------------------------------------------+ | í•목 | 예 | 설명 | +=============================+================+=============================================+ | Provider | CUBRIDProvider | ê³µê¸‰ìž ì´ë¦„ | +-----------------------------+----------------+---------------------------------------------+ | Data Source | demodb | ë°ì´í„°ë² ì´ìФ ì´ë¦„ | +-----------------------------+----------------+---------------------------------------------+ | Location | 127.0.0.1 | CUBRID 브로커 서버 IP 주소 ë˜ëŠ” 호스트 ì´ë¦„ | +-----------------------------+----------------+---------------------------------------------+ | User ID | PUBLIC | ì‚¬ìš©ìž ID | +-----------------------------+----------------+---------------------------------------------+ | Password | xxx | 비밀번호 | +-----------------------------+----------------+---------------------------------------------+ | Port | 33000 | 브로커 Port 번호 | +-----------------------------+----------------+---------------------------------------------+ | Fetch Size | 100 | Fetch í¬ê¸° | +-----------------------------+----------------+---------------------------------------------+ | Charset | utf-8 | 문ìžì…‹ | +-----------------------------+----------------+---------------------------------------------+ | Autocommit Isolation Levels | 4096 | isolation level | +-----------------------------+----------------+---------------------------------------------+ ìœ„ì˜ ì˜ˆë¥¼ ì´ìš©í•œ ì—°ê²° 문ìžì—´ì€ 다ìŒê³¼ 같다. :: "Provider=CUBRIDProvider;Data Source=demodb;Location=127.0.0.1;User ID=PUBLIC;Password=xxx;Port= 33000;Fetch Size=100;Charset=utf-8;Autocommit Isolation Levels=256;" .. note:: * ì—°ê²° 문ìžì—´ì—서 ì„¸ë¯¸ì½œë¡ (;)ì€ êµ¬ë¶„ìžë¡œ 사용ë˜ë¯€ë¡œ, ì—°ê²° 문ìžì—´ì— 암호(Password)를 ì§€ì •í• ë•Œ ì•”í˜¸ì˜ ì¼ë¶€ì— ì„¸ë¯¸ì½œë¡ ì„ ì‚¬ìš©í• ìˆ˜ 없다. * 칼럼ì—서 ì •ì˜í•œ í¬ê¸°ë³´ë‹¤ í° ë¬¸ìžì—´ì„ **INSERT** / **UPDATE** 하면 문ìžì—´ì´ ìž˜ë ¤ì„œ ìž…ë ¥ëœë‹¤. * ìŠ¤ë ˆë“œ 기반 프로그램ì—서 ë°ì´í„°ë² ì´ìФ ì—°ê²°ì€ ê° ìŠ¤ë ˆë“œë§ˆë‹¤ ë…립ì 으로 사용해야 한다. * ìžë™ 커밋 모드ì—서 SELECT 문 수행 ì´í›„ ëª¨ë“ ê²°ê³¼ ì…‹ì´ fetchë˜ì§€ 않으면 ì»¤ë°‹ì´ ë˜ì§€ 않는다. ë”°ë¼ì„œ, ìžë™ 커밋 ëª¨ë“œë¼ í•˜ë”ë¼ë„ 프로그램 ë‚´ì—서 ê²°ê³¼ ì…‹ì— ëŒ€í•œ fetch ë„중 ì–´ë– í•œ 오류가 ë°œìƒí•œë‹¤ë©´ 반드시 커밋 ë˜ëŠ” ë¡¤ë°±ì„ ìˆ˜í–‰í•˜ì—¬ 트랜ìžì…˜ì„ 종료 처리하ë„ë¡ í•œë‹¤. .NET 환경ì—ì„œì˜ ë©€í‹° ìŠ¤ë ˆë“œ í”„ë¡œê·¸ëž˜ë° -------------------------------------- Microsoftì˜ .NET 환경ì—서 CUBRID OLE DB Provider를 ì´ìš©í•˜ì—¬ 프로그래ë°í• 때 추가로 ê³ ë ¤í•´ì•¼ í• ì‚¬í•ì€ ë‹¤ìŒê³¼ 같다. 관리 환경ì—서 ADO.NETì„ í†µí•œ 멀티 ìŠ¤ë ˆë“œ 프로그래ë°ì„ í• ë•Œì—는, CUBRID OLE DB Providerê°€ ì˜¤ì§ STA(Single Threaded Apartment) ì†ì„±ë§Œì„ ì§€ì›í•˜ë¯€ë¡œ, Thread ê°ì²´ì˜ ApartmentState ì†ì„± ê°’ì„ ApartmentState.STA 값으로 변경해야 한다. 만약 아무런 ì„¤ì •ì„ í•˜ì§€ 않는다면 Thread ê°ì²´ì˜ ì´ ì†ì„± 기본값으로 Unknown ê°’ì´ ë°˜í™˜ë˜ê¸° ë•Œë¬¸ì— ë©€í‹° ìŠ¤ë ˆë“œ í”„ë¡œê·¸ëž˜ë° ì‹œ ë¹„ì •ìƒì 으로 ë™ìž‘í• ìˆ˜ 있다. .. warning:: OLE DBì˜ ëª¨ë“ ê°ì²´ëŠ” COM ê°ì²´ì´ë‹¤. 현재 CUBRID OLE DB Provider는 COM threading model 중 apartment threading modelë§Œì„ ì§€ì›í•˜ê³ free threading modelì€ ì§€ì›í•˜ì§€ 않는다. ì´ëŠ” .NET 환경ì—ë§Œ 해당하는 사í•ì€ ì•„ë‹ˆê³ ëª¨ë“ multi-threaded í™˜ê²½ì— í•´ë‹¹í•˜ëŠ” ë‚´ìš©ì´ë‹¤. OLE DB API ========== OLE DB APIì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ Micorosoft OLE DB 문서( `https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms722784(v=vs.85) <https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms722784(v=vs.85)>`_ )를 ì°¸ê³ í•œë‹¤. CUBRID OLE DBì— ëŒ€í•œ ìžì„¸í•œ ë‚´ìš©ì€ http://ftp.cubrid.org/CUBRID_Docs/Drivers/OLEDB/\를 ì°¸ê³ í•œë‹¤.