我刚从Oracle中查到用ADO读取BLOB字段是不行的,好象要在ASP中引用Oracle自带的OO4O(Oracle object for OLE)组件才能读取,但我不会怎么写?求救!!!

解决方案 »

  1.   

    BLOB字段好像用ole也不行的,用long Raw 肯定可以
      

  2.   

    在你的机器上装Oracle object for OLE 驱动,就可以访问了,我就是这样实现的....
      

  3.   

    to qinkm:只要装Oracle object for OLE 就可以用ADO读出BLOB字段吗??有没有测试程序
      

  4.   

    我的测试成功了,在安装了Oracle object for OLE之后,在选择驱动程序是要选择
    Oracle Provider for OLE DB再使用ADO就可以了读出BLOB字段了,呵呵
    例程:AfxOleInit();
    m_pConnection.CreateInstance(__uuidof(Connection));
    try                 

    WriteLog("正在连接到数据库服务器,请稍候....");
    char buf[1024];
             sprintf(buf,"Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source=%s;","serverName");
    m_pConnection->Open(buf,_bstr_t(m_UserName),_bstr_t(m_Passwd),adModeUnknown);
    WriteLog("连接数据库服务器成功");
    }
    catch(_com_error &e)
    {
    WriteLog("连接服务器失败,原因:",(char*)e.Description());
    m_pConnection = NULL;
    return FALSE;
    } 取BLOB数据函数
    void GetChuck()
    {
    ....
    long actualSize = pRecordset->GetFields()->GetItem(_variant_t(fldName))->ActualSize;
    _variant_t var;
    char buf[1024];
    while(actualSize > 0 )
    {
    offsetSize = actualSize>= 1024 ? 1024 : actualSize;
    try
    {
    var = pRecordset->GetFields()->GetItem(_variant_t(fldName))->GetChunk(offsetSize);
    }
    catch(_com_error &e)
    {}
    for(long index=0;index< offsetSize; index++)

    ::SafeArrayGetElement(var.parray,&index,buf+index); 
    } file.WriteString(cgrsName+"{"+fn+"."+ext+"}\n");
    else
    binFile.Open(task->dir+"\\"+m_taskID+"\\"+fn+"."+ext,CFile::modeCreate | CFile::modeWrite);
    }
    binFile.Write(buf,offsetSize);
    actualSize -= offsetSize;
    factWriteSize += offsetSize;
    }
    binFile.Close();
    }
      

  5.   

    你把GetChunk(32000),改为GetChunk(32000,1024),即可读出数据,可以试一试,祝你成功
      

  6.   

    对不起,刚才没写完,ORACLE的驱动还要改为ORACLE自己提供的驱动程序