2010-12-13 8 views
1

확장해야하는 오래된 MFC 프로젝트가 있습니다. 데이터베이스 연산의 경우 CRecordSet에서 파생 된 클래스를 사용하고 Oracle BLOB를 CByteArray에 바인딩합니다. null BLOB를 가진 행을 검색 할 때 크기가 1 바이트이고 값이 0xFF 인 배열을 얻습니다. 필드가 실제로 데이터베이스에서 NULL인지 확인하는 방법이 있습니까? 또는이 0xFF 배열 실제로 null BLOB 나타내는 값입니까?MFC에서 NULL BLOB-s를 처리하십시오.

답변

2

좋아, 찾았습니다. 함수는 CRecordset :: IsFieldNull이며, 매개 변수는 바인딩 된 CByteArray 개체의 주소이며 함수는 Open()과 Close() 사이에서만 사용할 수 있습니다. 다음과 같은 내용 :

void CMySet::DoFieldExchange(CFieldExchange* pFX) 
{ 
    ... 
    RFX_Binary(pFX, _T("[THE_BLOB]"), m_TheBlob, MAX_BLOB_SIZE); 
} 

void CMySet::ReadBlob(CByteArray& theBlob, BOOL& isNull) 
{ 
    m_strFilter = ...; 

    Open(); 

    isNull = IsFieldNull(&m_TheBlob); 

    if (!isNull) 
    theBlob.Copy(m_TheBlob); 

    Close(); 
} 
관련 문제