C/C++ codeHRESULT COdb::WriteBlob(const CString TableName, const CString FieldName, BYTE* blob, int Size, CString guid)
{
OCILobLocator *lob;
ub4 amtp;
CString mySql;
mySql.Format("Select %s From %s Where id = '%s' For Update",FieldName, TableName, guid);
amtp = Size;
OCIStmt *hpStatement = NULL;
CheckErr( OCIHandleAlloc( m_po->hpEnv,
(void**)&hpStatement,
OCI_HTYPE_STMT,
0,
NULL )
);
CheckErr(OCIDescriptorAlloc(m_po->hpEnv,(void**)&lob, OCI_DTYPE_LOB,
(size_t) 0, (dvoid **) 0));
CleanWhitespace( mySql );
CheckErr(OCIStmtPrepare(hpStatement, m_po->hpErr,(text *)mySql.GetBuffer(0), (ub4)strlen(mySql),
OCI_NTV_SYNTAX, OCI_DEFAULT));
OCIDefine *p_Define;
CheckErr(OCIDefineByPos(hpStatement, &p_Define, m_po->hpErr, 1, (dvoid *)
&lob, (sb4) -1,
(ub2) SQLT_BLOB, 0, 0, 0, OCI_DEFAULT));
CheckErr(OCIStmtExecute(m_po->hpContext, hpStatement, m_po->hpErr, (ub4) 1, (ub4) 0,
(OCISnapshot *) NULL,
(OCISnapshot *) NULL,
(ub4) OCI_DEFAULT));
CheckErr(OCILobWrite(m_po->hpContext, m_po->hpErr, lob,
&amtp, (ub4) 1, blob,
Size,
OCI_ONE_PIECE,
(dvoid *) 0,
NULL, (ub2) 0, (ub1) 0));
OCITransCommit(m_po->hpContext,m_po->hpErr, (ub4)0);
if ( hpStatement )
OCIHandleFree( hpStatement, OCI_HTYPE_STMT );
if (lob)
OCIHandleFree(lob,OCI_DTYPE_LOB);
return m_po->hr;
}
------解决方案--------------------探讨
楼上给的代码确实没看懂,下面是我写的代码框架,serch函数是将文件转化为二进制数据流,要在writeDB中实现保存到数据库BLOB字段内。谁能给完善下啊。。。。。
int serch(const char*pathname,char*filename)
{
long size;
fstream file;
file.open(filename,ios::binary)
if(……