天天看点

oracle oci 导出数据,求“oci oracle调用接口程序实现文件保存到oracle数据库表BLOB字段”的实现方法,该如何解决...

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(……