'ADO'에 해당되는 글 3건

simpleAdo 2.10

그동안 귀차니즘의 압박으로  BLOB(Binary Large OBject)데이터의 DB입출력에 관한 코드가 없었는데, 이번 프로젝트에 마침 이미지 데이터를 입력할 기회가 생김!!..

그래서 오랜만에 simpleAdo 업데이트...
그간 simpleAdo에서 사용하지 않았던 RecordSet의 기능들을 사용하느라 진땀좀 뺐음.
객체도 하나 늘어났고..
기능상의 오류가 날 가능성을 배제할수 없음. 고로 난 책임안지겠음.ㅋ

#define __WEATHER에 감싸져 있는 코드를 수정하셔서 사용하시면 쉽게 BLOB데이터를
입력하실 수 있을거에요~~

사용하시는 분이 아직 계실런지 모르겠지만, 일단 올려둡니다.~

  - Modify Date/Ver : 20071011/ 2.1
   - BLOB 데이터 입출력 지원 (image file Get/Put)
   - 제네럴한 코드로 짜기에 시간이 촉박하여 프로젝트 디팬던트 하지만, 코드를 보시면
     쉽게 수정하여 사용하실 수 있습니다.
    -added functions
    void UpdateBinaryFile(LPCSTR lpszFilePath, LPCSTR lpszQry, ...);
   #ifdef __WEATHER // project dependent.
    void InsertWxImages(int nTime, LPCSTR lpszKind, const vector<CString> vtFilePath);
    void GetWxImages(int nTimes, LPCSTR lpszPicKind);
   #endif


PS. doxygen으로 만든 문서 첨부합니다.

'개발' 카테고리의 다른 글

자원이 사용중이고 NOWAIT...  (0) 2008.03.25
응용 프로그램을 위한 최상의 사용자 환경을 만드는 방법  (0) 2008.02.26
simpleAdo 2.10  (0) 2008.02.21
프로세스의 메모리 사용량가져오기  (2) 2007.09.27
TCP/IP wouldblock 처리  (1) 2007.07.27
Shock Sticker  (1) 2007.07.12

Trackbacks 0 / Comments 0

Leave Comments

simpleAdo 2.0


/*!
 \brief
  ADO Component Wrapper Class
  - Create Date/Ver : 2003.03.19 /1.0
   - RecordSet은 CreateInstance사용안함.
  - Modify Date/Ver : 2003.04.18 / 1.5
   - RecordSet셋팅을 위해  CreateInstance를 사용했습니다.(ExcuteQryEx)
   - SaveQryData함수 추가 : select로 불러온 데이터를 파일로 저장(XML)
   - ExcuteQryEx함수 추가(레코드셋 설정을 위해...)
  - Modify Date/Ver : 2003.05.19 / 1.6
   - ExcuteQry, InsUpDel()함수 가변인수 적용..
    - EX) \n
     int nData=10;\n
     ExcuteQry("select * from tab where id= %d",nData);\n
  - Modify Date/Ver : 2003.08.26 / 1.7
   - GetState()함수 추가...
    - Object의 상태를 리턴합니다.
  - Modify Date/Ver : 2004.04.02 / 1.71
   - GetData(int&) 부분 수정
    - MS-SQL decimal타입 리턴시 32000이상시 - 값으로 리턴되는 버그 수정
  - Modify Date/Ver : 2004.04.07 / 1.80
   - simpleAdo 인스턴스간 복사 지원
    - ex) simpleAdo ado1;\n
     ...\n
     ...\n
     ...\n
     simpleAdo ado2(ado1); //가능\n
     simpleAd0 ado3=ado1; //가능\n
     simpleAdo ado4;\n
     ado4=ado1;    //가능\n
   - 데이터베이스 처리시 에러시 dumpfile 지원
    - 데이터 베이스 작업시 에러 file로 저장.
  - Modify Date/Ver : 1.81
  - 타입 강화.
   - select 질의 후 _varient_t형태로 리턴 추가
  - Modify Date/Ver : 2005-11-15/ 1.82
   - 리턴타입 강화
   - CHAR값 리턴 함수추가
    - BOOL GetData(const long nCol,const long nRow,TCHAR& chData) const;
  - Modify Date/Ver : 1.90
   - ExcuteQry로 select Insert Update Delete Stored Procedure 모두 지원(기존함수로도 지원함.)
   - Stored Procedure실행시 Recordset이 존재할 경우 GetData()로 사용 가능.
  - Modify Date/Ver : 20060919/ 2.0
   - 시간이 많이 걸리는 쿼리 시 message pumping을 실시하여 UI가 멈추는 일이 없도록 함.
   - 사용자가 선택할수 있도록 SetMessagePump(BOOL)지원.
   - 참고사항
   - 프로젝트시작 / 종료부부분에 명기 -> ::CoInitialize(NULL); and ::CoUninitialize();
   - _ConnectionPtr,과 _RecordsetPtr의 사용 종료시 ->Close(), .Release()함수는 자동호출되므로 사용안함.
   - StoredProcedure 사용법
    - Return 값을 가지는 프로시져인 경우
     _CommandPtr 객체를 이용(MSDN 참조)\n
     In, Out Parameter를 생성하고 작업해야 함.\n
     _CommandPtr cmd;\n
     cmd.CreateInstance(__uuidof(Command));\n
     cmd->ActiveConnection=m_pConnection;\n
     cmd->CommandType=adCmdStoredProc;\n
     ...\n
     ...\n
     ...\n
    - Recordset을 리턴하는 경우
     ado.ExcuteQry("exec ProcName %d,%d,%d",1,2,3);\n
     ado.GetData(i,j,retData);\n
    - Return정보가 없는 경우
     ado.InsUpDel("exec ProcName 1,2,3"); \n
     또는 ado.ExcuteQry("exec ProcName 1,2,3");\n

 \author [likehood / 송영배]
 \date [2006-07-14 오후 3:35:59]
 \version [2.0]
 \bug
 \warning 대용량 데이터 쿼리시 HEAP메모리를 많이 차지하게 됩니다.
*/

'개발' 카테고리의 다른 글

비트 필드 스트럭쳐  (0) 2007.05.22
도대체 가상함수는 어디에다 쓰는 것일까.  (0) 2007.05.22
simpleAdo 2.0  (0) 2007.05.22
c/c++ 간단 토글링  (0) 2007.05.22
XmlLite SDK 관련..  (0) 2007.04.12
도서물 도착!!  (0) 2007.04.09

Trackbacks 0 / Comments 0

Leave Comments

C++에서 ADO를 이용한 Stored Procedure 사용법


 

// 팁이라고 할것까지 있을런지...

// C++에서 ADO를 이용한 Stored Procedure 사용법.
// 객체 해제는 기술하지 않음.


void TestStoredProc()
{
        try{
                // 객체 생성
                _RecordsetPtr recordset;
                _CommandPtr cmd;
                _ConnectionPtr connection;
                connection.CreateInstance(__uuidof(Connection));
                recordset.CreateInstance(__uuidof(Recordset));
                cmd.CreateInstance(__uuidof(Command));

                // 커넥션 객체 오픈
                connection->ConnectionTimeOut=10;
                connection->open("provider=...",NULL,NULL,adOptionUnspecified);

                // 커맨트 객체 초기화
                cmd->CommandType=adCmdStoredProc;       

                cmd->CommandText=_bstr_t("spBeginJob");

                cmd->ActiveConnection=connection;

                // 저장프로시져의 리턴 값 및 파라메터값을 지정함.
                _ParameterPtr  paramRet=cmd->CreateParameter("return",adInteger,adParamReturnValue,sizeof(int)) ;
                _ParameterPtr  paramInput=cmd->CreateParameter("@inputData",adChar,adParamInput,4) ;
                
                // adParamInput에 해당하는 파라메터에 입력 값 대입
                ptr1->Value=_variant_t("Test");        
                
                // 파라미터값을 command객체에 추가( returnValue를 처음에 append해야 함.)
                cmd->Parameters->Append(paramRet);
                cmd->Parameters->Append(paramInput);

                // 명령실행
                recordset=cmd->Execute(NULL,NULL,adCmdStoredProc);

                // Return값 읽어 옴. 방법#1
                _variant_t retData(paramRet->Value);
                // Return값 읽어 옴. 방법#2
                cmd->Parameters->GetItem("ret")->Value;
        }catch(_com_error &e){
                //에러처리
        }
}

Trackbacks 0 / Comments 0

Leave Comments