怎样用ADO读出Oracle8i的BLOB字段类型里图象? 我刚从Oracle中查到用ADO读取BLOB字段是不行的,好象要在ASP中引用Oracle自带的OO4O(Oracle object for OLE)组件才能读取,但我不会怎么写?求救!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BLOB字段好像用ole也不行的,用long Raw 肯定可以 在你的机器上装Oracle object for OLE 驱动,就可以访问了,我就是这样实现的.... to qinkm:只要装Oracle object for OLE 就可以用ADO读出BLOB字段吗??有没有测试程序 我的测试成功了,在安装了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"); elsebinFile.Open(task->dir+"\\"+m_taskID+"\\"+fn+"."+ext,CFile::modeCreate | CFile::modeWrite); } binFile.Write(buf,offsetSize); actualSize -= offsetSize; factWriteSize += offsetSize; } binFile.Close();} 你把GetChunk(32000),改为GetChunk(32000,1024),即可读出数据,可以试一试,祝你成功 对不起,刚才没写完,ORACLE的驱动还要改为ORACLE自己提供的驱动程序 sql优化问题 在oracle中如何将varchar类型转换成raw类型 急急急,高分借id empno=&no何许人也? 读取的char类型去掉后面的空格 oracle10客户端配置 创建JOB 报字符串缓冲区太小 我是第一次使用ORACLE,安装后却不能登陆进入. ora-27100 oracle shared memory realm already exists ANALYSIS TABLE到底该不该用,什么时候用? 存储过程中能否执行一个动态的语句? 重赏之下必有勇夫:jdbc能访问本机数据库吗?
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();
}