小弟初次接触OCI,网上资料也不多,而且有点含混其辞的,谢谢大家帮助。我想把数据库里的BLOB 字段取出来。程序已经连接到数据库了。SQL的语句执行也显示成功。
可是用OCILobLocatorIsInit检测我的OCILOBLocator 的时候显示没初始化。

//获得LOB数据的长度
sStatus = OCILobGetLength(m_OraEnv.m_hOCI.phService, 
m_OraEnv.m_hOCI.phErr, 
pLob, 
&nLobLen); 
返回结果为-2 ,也就是OCI_INVALID_HANDLE 。求教大家了,搞了一天了,十分感谢。
     
char* cSQL = "SELECT the_image FROM image WHERE the_name = '1.jpg'"; //1、准备执行SQL语句
sword sStatus = OCIStmtPrepare(m_OraEnv.m_hOCI.phStmt, 
m_OraEnv.m_hOCI.phErr,
(oratext*)cSQL, 
(ub4)strlen(cSQL), 
OCI_NTV_SYNTAX, 
OCI_DEFAULT); if (GW_SUCCESS != sStatus)
{
m_OraEnv.GetOCIErrInfo(m_OraEnv.m_hOCI.phErr, 
m_OraEnv.m_nErrCode, 
m_OraEnv.m_szOCIErrInfoArr, 
ERRINFO_MAX_LEN);
AfxMessageBox(_T("SQL语句准备出错!"));
return;
} //2、定义指向大对象的指针
OCILobLocator *pLob = (OCILobLocator *) 0;
sStatus = OCIDescriptorAlloc((dvoid *)m_OraEnv.m_hOCI.phEnv, 
(dvoid **)&pLob,
(ub4)OCI_DTYPE_LOB,
(size_t)0,
(dvoid **)0); if(OCI_SUCCESS != sStatus)
{
m_OraEnv.GetOCIErrInfo(m_OraEnv.m_hOCI.phErr, 
m_OraEnv.m_nErrCode, 
m_OraEnv.m_szOCIErrInfoArr, 
ERRINFO_MAX_LEN);
AfxMessageBox(_T("开辟LOB存放空间失败!"));
return;
}
OCIDefine* pDefine[1];             //定义句柄,用于存储列的定义信息

//3、定义输出变量
//绑定指针
sStatus = OCIDefineByPos(m_OraEnv.m_hOCI.phStmt, 
&pDefine[0], 
m_OraEnv.m_hOCI.phErr, 
1, 
(dvoid *)&pLob, 
(sb4) -1,                       
SQLT_BLOB,
&ind, 
0, 
0, 
OCI_DEFAULT); if (GW_SUCCESS != sStatus)
{
m_OraEnv.GetOCIErrInfo(m_OraEnv.m_hOCI.phErr, 
m_OraEnv.m_nErrCode, 
m_OraEnv.m_szOCIErrInfoArr, 
ERRINFO_MAX_LEN);
AfxMessageBox(_T("SQL语句准备出错!"));
return;
}
//4、执行SQL语句
sStatus = OCIStmtExecute(m_OraEnv.m_hOCI.phService,
m_OraEnv.m_hOCI.phStmt, 
m_OraEnv.m_hOCI.phErr, 
(ub4)0, 
(ub4)0, 
(CONST OCISnapshot*)0, 
(OCISnapshot*)0, 
(ub4)OCI_DEFAULT);   if (GW_SUCCESS != sStatus)
{
m_OraEnv.GetOCIErrInfo(m_OraEnv.m_hOCI.phErr, 
m_OraEnv.m_nErrCode, 
m_OraEnv.m_szOCIErrInfoArr, 
ERRINFO_MAX_LEN);
AfxMessageBox(_T("SQL语句执行出错!"));
return;
}
 
ub4   nOffset = 1;                 //偏移量
ub4   nLobLen = 0;                 //LOB的长度
char   btBuffArr[LOB_MAXBUFFLEN];   //LOB的数据缓冲区 ub4   nAmtp = 0;                   //读出数据的长度
//ub4   nRemainder = 0;            //剩余的数量
int nErrCode = 0;
char szInfoStrArr[512];
////////////////////////////////////////////////////////////////////
//出错的地方,执行后initialized为0 //
        boolean is_initialized = 1;
sStatus = OCILobLocatorIsInit(m_OraEnv.m_hOCI.phEnv, 
m_OraEnv.m_hOCI.phErr, pLob, &is_initialized);//执行后 sStatus为-2   OCI_INVALID_HANDLE 
//获得LOB数据的长度
sStatus = OCILobGetLength(m_OraEnv.m_hOCI.phService, 
m_OraEnv.m_hOCI.phErr, 
pLob, 
&nLobLen);