我用在做Oracle数据库程序时出现错误, 具体如下:
某表中有blob数据, 根据该表结构从CRecordset类中继承一个新的类CMyRecordset后, 用Open函数打开记录集抛出异常, 但异常中错误字符串为空。
跟踪断点后发现错误出在DoDataExchange虚函数中的RFX_LongBinary上, 在读取数据库中一个blob字段时抛出的异常, 此时数据库中该字段为NULL,如果不读取该字段则没有问题, 不解中ing....
某表中有blob数据, 根据该表结构从CRecordset类中继承一个新的类CMyRecordset后, 用Open函数打开记录集抛出异常, 但异常中错误字符串为空。
跟踪断点后发现错误出在DoDataExchange虚函数中的RFX_LongBinary上, 在读取数据库中一个blob字段时抛出的异常, 此时数据库中该字段为NULL,如果不读取该字段则没有问题, 不解中ing....
解决方案 »
- 关于vc设置excel格式的问题(急)
- 关于CAsyncSocket编程遇到的问题
- 如何作出飘雪的效果
- 在线等待:Createfile问题----端口号大于10怎么打开?急急!!!!
- 2002年(今年)的论坛光盘出了没?有《2003程序员大本营》吗?
- 简单问题,分数不低:如何得到splitter的rect? up也给分
- 那个清除屏幕的函数是什么?急。。。。。
- 等你救呀!!
- 在IDL把接口写在library里和写在外边有什么区别?看例子
- 各位讲讲你们是怎么对付内存泄漏这个问题的?
- 在MFC中,采用winnet api进行编程,如何快速的判断一个网站的页面是否可以访问?
- 百分求解:vs2005的profiling 如何设置?
==看一下你这段代码怎么写的
==看一下你这段代码怎么写的
参考:
读取数据
// 读取数据
vValue = m_pRecordset->Fields->GetItem(bstrSegName)->Value;
// 读取数据大小
nDataSize = m_pRecordset->GetFields()->GetItem(bstrSegName)->ActualSize;
nDataType = vValue.vt;
if (nDataType == (VT_ARRAY | VT_UI1))
{
m_lpData = new char[nDataSize];
memset(m_lpData, 0, nDataSize);
char* pBufTemp = NULL;
SafeArrayAccessData(vValue.parray, (void **)&pBufTemp);
for (int i = 0; i < nDataSize; i++)
*(((char*)m_lpData)+i) = *(pBufTemp+i);
SafeArrayUnaccessData (vValue.parray);
}
存入数据
BOOL SaveBLOB(CString strSegName, UINT& nDataSize, char* pBuf)
{
_bstr_tbstrSegName = strSegName;
VARIANTvarBLOB;
SAFEARRAY*psa;
SAFEARRAYBOUNDrgsabound[1];
// 保存BLOB数据
if(nDataSize > 0)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nDataSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)nDataSize; i++)
SafeArrayPutElement (psa, &i, pBuf+i);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem(bstrSegName)->AppendChunk(varBLOB);
}
m_pRecordset->Update();
return TRUE;
}