ADO中,存图片到SQL SERVER数据库,发生异常,哪位高手能帮小弟我看下代码,哪里出错了
ADO中,存图片到SQL SERVER数据库,发生错误,谁能帮我看下代码,哪里出错了
目的是将图片存入SQL SERVER数据库中的一image类型字段,结果程序运行到update时报错,异常抛出.不知道程序哪里出问题.
strcpy(szCommand, "SELECT * FROM T_DBIndex ");
try
{
lstate = m_pRecordset-> State;
if(lstate == adStateOpen)
m_pRecordset-> Close();
m_pRecordset-> Open((_bstr_t)szCommand,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
Fields *pFields = m_pRecordset-> GetFields();
Field *pField = pFields-> GetItem( "other3 ");
// pField-> get_ActualSize(&nLenth);
CFile imagefile;
if(0 == imagefile.Open( "C:\\WINNT\\Blue Lace 16.bmp ",CFile::modeRead))
return;
long nLength = imagefile.GetLength();
BYTE *pbuf = NULL;
BYTE *pBufEx = NULL;
pbuf = new BYTE[nLength];
pBufEx = pbuf;
if(pbuf == NULL)
return; //allocate memory error;
imagefile.Read(pbuf,nLength); //read the file into memory
//build a SAFFERRAY
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nLength;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long j = 0; j < nLength; j++)
SafeArrayPutElement (psa, &j, pBufEx++);
VARIANT varBLOB;
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset-> AddNew();
pField-> AppendChunk(varBLOB);
m_pRecordset-> Update(); //这句一执行就出错了,跳到异常抛出语句去了
delete []pbuf;
}
catch(...)
{
AfxMessageBox( "E ");
}
------解决方案--------------------
你的数据有多少列,你的程序只写了一列,其它列允许为空吗?
------解决方案--------------------
既然捕捉错误了,就看看错误描述后再说。
数据库的数据类型对不对?
另外,你SafeArrayCreate后,还需要释放内存,你光释放pbuf是不够的,SafeArrayCreate会申请新的空间,并不是简单的引用pBufEx的地址,不过这与你的Update语句出错应该没什么关系。
目的是将图片存入SQL SERVER数据库中的一image类型字段,结果程序运行到update时报错,异常抛出.不知道程序哪里出问题.
strcpy(szCommand, "SELECT * FROM T_DBIndex ");
try
{
lstate = m_pRecordset-> State;
if(lstate == adStateOpen)
m_pRecordset-> Close();
m_pRecordset-> Open((_bstr_t)szCommand,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
Fields *pFields = m_pRecordset-> GetFields();
Field *pField = pFields-> GetItem( "other3 ");
// pField-> get_ActualSize(&nLenth);
CFile imagefile;
if(0 == imagefile.Open( "C:\\WINNT\\Blue Lace 16.bmp ",CFile::modeRead))
return;
long nLength = imagefile.GetLength();
BYTE *pbuf = NULL;
BYTE *pBufEx = NULL;
pbuf = new BYTE[nLength];
pBufEx = pbuf;
if(pbuf == NULL)
return; //allocate memory error;
imagefile.Read(pbuf,nLength); //read the file into memory
//build a SAFFERRAY
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nLength;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long j = 0; j < nLength; j++)
SafeArrayPutElement (psa, &j, pBufEx++);
VARIANT varBLOB;
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset-> AddNew();
pField-> AppendChunk(varBLOB);
m_pRecordset-> Update(); //这句一执行就出错了,跳到异常抛出语句去了
delete []pbuf;
}
catch(...)
{
AfxMessageBox( "E ");
}
------解决方案--------------------
你的数据有多少列,你的程序只写了一列,其它列允许为空吗?
------解决方案--------------------
既然捕捉错误了,就看看错误描述后再说。
数据库的数据类型对不对?
另外,你SafeArrayCreate后,还需要释放内存,你光释放pbuf是不够的,SafeArrayCreate会申请新的空间,并不是简单的引用pBufEx的地址,不过这与你的Update语句出错应该没什么关系。