怎样用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自己提供的驱动程序 正则表达式问题 谁有oracle 9i win32系统的 Oracle字符集 不显示删除回复显示所有回复显示星级回复显示得分回复 关于dbms_session.set_context无权限调用的问题,解决此问题50元RMB 登陆广域网中的oracle数据库,怎样才能不让管理员查出我的IP地址? 清囊求教一个简单的问题(可怜可怜吧) 关于oracle的自启动问题 存储过程 小问题:请问怎么取一个字段的其中一部分字符?感谢! Oracle字符长度问题 存储过程中能否执行一个动态的语句? 重赏之下必有勇夫: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();
}