没怎么用过oracle, 所以希望回答能具体一些我有一个表,表结构如下
create table T_STRATEGYCONTENT
(
STRSTRATEGYID NVARCHAR2(50),
STRVALUE CLOB
)查询语句如下,一执行查询语句就报错
strSQL.Format("SELECT * FROM t_StrategyContent");错误信息如下:
数据类型不被支持。
State: (null), Native: 0, Source: Microsoft OLE DB Provider for Oracle发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
State: (null), Native: 0, Source: Microsoft OLE DB Provider for Oracle未指定的错误
State: (null), Native: 0, Source: Microsoft OLE DB Provider for Oracle问题:
用ADO操作oracle数据库,如何读取、插入Clob类型的字段,谢谢!
create table T_STRATEGYCONTENT
(
STRSTRATEGYID NVARCHAR2(50),
STRVALUE CLOB
)查询语句如下,一执行查询语句就报错
strSQL.Format("SELECT * FROM t_StrategyContent");错误信息如下:
数据类型不被支持。
State: (null), Native: 0, Source: Microsoft OLE DB Provider for Oracle发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。
State: (null), Native: 0, Source: Microsoft OLE DB Provider for Oracle未指定的错误
State: (null), Native: 0, Source: Microsoft OLE DB Provider for Oracle问题:
用ADO操作oracle数据库,如何读取、插入Clob类型的字段,谢谢!
然后把数据源配置正确,连接上,就成了。
FieldsPtr pFields;
FieldPtr pField;
pFields=pPtr->Fields;
pField = pFields->Item ["image"];
BYTE buffer[BUFFER_SIZE];
long pl=0;
pField->get_ActualSize(&pl);
int nSize = (int)pl;
CFile fp;
if (fp.Open (strSaveFileName,CFile::modeCreate | CFile::modeWrite) == NULL)
{
AfxMessageBox("Create File failed!" + strSaveFileName);
pPtr->Close();
pPtr.Release();
return FALSE;
} int nReadSize = BUFFER_SIZE;
int nBlock = nSize / BUFFER_SIZE;
int nTailSize = nSize - nBlock * BUFFER_SIZE; for (int i = 0;i<nBlock;i++)
{
_variant_t varData;
varData = pField->GetChunk (nReadSize); AfxCopyArrayBinaryData(varData.parray,buffer,nReadSize); fp.Write (buffer,nReadSize);
}
oid AfxCreateOneDimArray(VARIANT& varSrc, DWORD dwSize)
{
UINT nDim; // Clear VARIANT and re-create SafeArray if necessary
if (varSrc.vt != (VT_UI1 | VT_ARRAY) ||
(nDim = ::SafeArrayGetDim(varSrc.parray)) != 1)
{
VERIFY(::VariantClear(&varSrc) == NOERROR);
varSrc.vt = VT_UI1 | VT_ARRAY; SAFEARRAYBOUND bound;
bound.cElements = dwSize;
bound.lLbound = 0;
varSrc.parray = ::SafeArrayCreate(VT_UI1, 1, &bound);
if (varSrc.parray == NULL)
AfxThrowMemoryException();
}
else
{
// Must redimension array if necessary
long lLower, lUpper;
AfxCheckError(::SafeArrayGetLBound(varSrc.parray, 1, &lLower));
AfxCheckError(::SafeArrayGetUBound(varSrc.parray, 1, &lUpper)); // Upper bound should always be greater than lower bound
long lSize = lUpper - lLower;
if (lSize < 0)
{
ASSERT(FALSE);
lSize = 0; } if ((DWORD)lSize != dwSize)
{
SAFEARRAYBOUND bound;
bound.cElements = dwSize;
bound.lLbound = lLower;
AfxCheckError(::SafeArrayRedim(varSrc.parray, &bound));
}
}
}void AfxCopyBinaryData(SAFEARRAY* parray, const void* pvSrc, DWORD dwSize)
{
// Access the data, copy it and unaccess it.
void* pDest;
AfxCheckError(::SafeArrayAccessData(parray, &pDest));
memcpy(pDest, pvSrc, dwSize);
AfxCheckError(::SafeArrayUnaccessData(parray));
}void AfxCopyArrayBinaryData(SAFEARRAY* parray,void* pvDest, DWORD dwSize)
{
// Access the data, copy it and unaccess it.
void* pvSrc;
AfxCheckError(::SafeArrayAccessData(parray, &pvSrc));
memcpy(pvDest, pvSrc, dwSize);
AfxCheckError(::SafeArrayUnaccessData(parray));
}