读书人

求“oci oracle调用接口程序实现文件保

发布时间: 2012-03-29 12:53:12 作者: rapoo

求“oci oracle调用接口程序实现文件保存到oracle数据库表BLOB字段”的实现方法
oci oracle调用接口程序实现文件保存到oracle数据库表BLOB字段,没做过这块,请做过的朋友提供下代码或方法,谢谢。

[解决办法]
友情帮顶
没人回复,可以换个小论坛试试,……
[解决办法]
先插入empty_blob()
再select blob from table for update
[解决办法]

C/C++ code
HRESULT 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(……

读书人网 >C++

热点推荐