VC ADO Oracle 读写BLOB
2011-06-04 15:52
162 查看
1、向数据库中插入一条带有BLOB字段的记录
以下为手动敲入 由于环境问题不能copy 代码 如有笔误或者错误请见谅
2. 从数据库中读取BLOB字段生成文件
以下为手动敲入 由于环境问题不能copy 代码 如有笔误或者错误请见谅
_Connection m_pConnection;//假设已得到 CFile m_file; CFileException e; _RecordsetPtr m_pRecordset; m_pRecordset.CreateInstance(__uuidof(Recordset)); HRESULT hr = m_pRecordset->Open("select A,B,C from D",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); if(SUCCEEDED(hr)){ m_pRecordset->AddNew(); m_pRecordset->PutCollect("A",_variant_t(//CString 值)); ... if(m_file.Open(filePath/*文件路径*/,CFile::modeRead | CFile::typeBinary,&e)){ int nsize = m_file.GetLength(); char *m_pbuff = NULL; SAFEARRAYBOUND rgs[1]; rgs[0].lLbound = 0; rgs[0].cElements = nsize; SAFEARRAY *pas; pas = SafeArrayCreate(VT_UI1,1,rgs); SafeArrayAccessData(psa,(void **)&m_pbuff); m_file.ReadHuge(m_pbuff,nsize); m_file.Close(); variant_t varBOLB; varBLOB.vt = VT_ARRAY | VT_UI1; varBLOB.parray = psa; m_pRecordset->GetFields()->GetItem("C")->AppendChunk(varBLOB); } m_pRecordset->Update(); SafeArrayUnaccessData(psa); } m_pRecordset->Close(); m_pRecordset.Release()
2. 从数据库中读取BLOB字段生成文件
//_Recordset .CFile 等声明同上 CString strSql; variant_t var; CString fileName; strSql.Format("select fileName,fileContent from XX where uid='%s'",uid); m_pRecordset = m_pConnection->Execute((_bstr_t)strSql,NULL,adCmdText); if(!m_pRecordset->BOF) { m_pRecordset->MoveFirst(); } while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("fileName"); if(var.vt != NULL) { fileName = (LPCTSTR)(_bstr_t)var; } long lDataSize = m_pRecordset->GetFields()->GetItem("fileContent")->ActualSize; _variant_t varBLOB = m_pRecordset->GetFields()->GetItem("fileContent")->GetChunk(lDataSize); CFile outFile(_T(XXX+"//"+fileName),CFile::modeWrite | CFile::modeCreate);//XXX+"//"+fileName 文件据对路径 if(varBLOB.vt == (VT_ARRAY | VT_UI1)) { char * pbuf = NULL; SafeArrayAccessData(varBLOB.parray,(void **)&pbuf); outFile.WriteHuge(pbuf,lDataSize); SafeArrayUnaccessData(varBLOB.parray); } m_pRecordset->MoveNext(); } m_pRecordset->Close(); m_pRecordset.Release()
相关文章推荐
- VC ADO Oracle 修改BLOB
- 在VC中用OLE DB读写SQL Server中的BLOB字段
- java oracle blob 读写操作
- VC++ ADO Oracle
- [VC++&Oracle]连接Oracle的ADO操作de简单多线程~
- Oracle Blob读写过程
- 在用vc+oracle+ado编程时
- C#中通过使用ADO.NET读写BLOB数据
- VC 使用ADO 需要 Oracle Objects for OLE
- VC++ ADO Oracle
- VC ado调用oracle执行存储过程获取记录集
- oracle中读写blob字段的问题解析
- oracle中读写blob字段的问题解析
- VC利用ADO简单读写数据库
- C# 读写 Oracle BLOB 数据
- VC使用ADO连接oracle中文字符问题:涉及oracle字符集、连接字串。
- Oracle中BLOB和CLOB数据的读写
- 在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除
- Python读写Oracle的BLOB类型
- C# 读写 Oracle BLOB 数据