본문 바로가기

IT Device Game

창고-IOCP서버에서 ADODB사용 스토어드프로시져 사용예

최초 게시글의 OCP서버는 CDataBase 클래스를 이용해서 SQL문으로 서버의  DB로직 처리를 한거고~
요번거는 ADODB를 이용하여 DB상의 스토어드 프로시져를 호출하는 구조입니다.

현장에서는 후자쪽이 더 흔한 형태겠지요

DB처리나 업무가 변경되어도 서버는 고치지 않고 프로시져를 고치는게 더 단순하니까요.

 

http://lucy7599.tistory.com/entry/창고-IOCP이용한-TCP서버-샘플
을 먼저 참조해주세요

사진제목 : 가면 치킨 라이더와의 조우

가면치킨라이더

 
첨부파일설명: 1. IOCP서버예제(VC++), 전문크기가 1024이상 처리하게 만든 클라이언트 DLL 및 테스트 클라이언트예제(VB) 합본,2.TCP서버를 띄우고 관리하는 WatchIocpSvr 예제  (반드시 IOCP서버와 같은디렉토리에서 실행

2번이 왜 필요하냐고 무슨역활을 하느냐면 서버는 항상 살아서 처리를 해야하는 놈이니까 이서버가 죽거나 하면 바로 인식해서 살리고 또는 하루에 한번 거래없는 새벽시간에 혹시나 샐지도 모르는 메모리등 리소스 관리를 위해 1초도 안되는 시간안에 서버프로세스를 내렸다 올리는 겁니다.

WatchIocpSvr.exe를 실행시키면 같은 디렉토리내의 TcpIocpSvr.exe를 찾아서 실행시킵니다.

서버에 허트비트로 커넥트해서 통신여부를 체크하려고도 했는데
그부분은 PASS 구차니즘의 압박으로 ^^;;

일단 잡지 못한 버그는 DB에 해당 프로시져가 없을때 그 프로시져명으로 cmd->Execute() 하면 서버프로그램이 뒈지는 문제 입니다.~

Execute 함수내에서 죽는데 이넘구조를 알수가 없으니 ^^;; 아니 알기도 싫고

그러므로 반드시 해당 DB에 예제 프로시저를 만드세요

/* 테스트로 작성한 프로시져 IBM DB2*/
/*
DROP PROCEDURE MSSCM.RECV_POS_DATA_SEND;
CREATE PROCEDURE MSSCM.RECV_POS_DATA_SEND
(IN @JOB_CODE CHAR(4),
  IN @COMP_CODE CHAR(4),
  IN @STORE_CODE CHAR(5),
  IN @VERSION_NO CHAR(3),
  IN @RECV_DATA VARCHAR(1004),
 
  OUT @RETN_STATUS CHAR(1),
  OUT @RETN_MESSAGE CHAR(50),
  OUT @RETN_DATA VARCHAR(953)
)
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  -------------------------------------------------------------------------------
-- SQL 저장 프로시듀어
-------------------------------------------------------------------------------
P1: BEGIN       
       
        SET @RETN_STATUS ='0';
        SET @RETN_MESSAGE ='정상등록                                          ';
        set @RETN_DATA='11111 ....  2222222222';

        RETURN 0;
END P1;

MS SQL 테스트용 프로시져는 소스안에 같이 있으니 참고하세요

뭐 이런 무식한 프로시져가 있겠냐 겠지만 1024까지 통신을 보장해야 했으므로 테스트를 위한 프로시져라고 이해하시길,

여러모로 소스가 끼워넣기에 잡다합니다.
소스는 여기저기 참고해서 끌어모아서 합체시킨겁니다.(이건 뭐 변신 합체 로봇도 아니공)

어쨋든 되게하라가 신조라서... 아직까지는 잘 돌아가네요
소스가 일관성이 없겠지만 ^^ 이해하시길....
아르바이트는 많은 시간을 할애할수 없답니다. 본업이... 먹고는 살아야 하는것이 진리~

 

반응형