如何实现将图像存储至postgre数据库(特急)
折腾了3天了还是没有将图像存储至postgre数据库中.从网上查询说将数据库字段设置为bytea类型,通过AppendChunk函数实现,但是执行时报"此环境中不允许操作".代码如下
FILE *file;
long m_iSize;
char *lpBuffer=NULL, *lpTemp;
VARIANT varBLOB;
CString m_strSQL;
SAFEARRAY *safeArray;
SAFEARRAYBOUND safeArrayB[1];
int m_iResult=0;
//读取文件流
file = fopen( filename, "rb+");
if(!file) {
return -1; //无法打开文件
}
fseek(file,0,2); //定位最后一行
m_iSize = ftell(file); //获取文件大小
fseek( file, 0, 0); //定位首行
lpBuffer = new char[m_iSize]; //申请空间在调用处负责释放
memset(lpBuffer, 0, sizeof(lpBuffer));
fread(lpBuffer, sizeof(char), m_iSize, file);
fclose(file);
//写入内存块
if(lpBuffer)
{
lpTemp = lpBuffer;
safeArrayB[0].lLbound = 0;
safeArrayB[0].cElements = m_iSize;
safeArray = SafeArrayCreate(VT_UI1, 1, safeArrayB); //创建SAFEARRAY对象
for (long i = 0; i < (long)m_iSize; i++)
{
SafeArrayPutElement (safeArray, &i, lpTemp++); //将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
}
varBLOB.vt = VT_ARRAY|VT_UI1; //将varBLOB的类型设置为BYTE类型的数组
varBLOB.parray = safeArray; //为varBLOB变量赋值
//写入数据
try
{
m_dbUpdate->CursorType=adOpenDynamic;
m_dbUpdate->Open(_bstr_t("select * from his_image "), _variant_t((IDispatch*)m_dbConnect,true), adOpenDynamic, adLockOptimistic, adCmdText);
m_dbUpdate->AddNew(); //添加新记录
m_dbUpdate->Fields->GetItem("image_id")->PutValue((_variant_t)image_id ); //为新记录填充username字段
m_dbUpdate->Fields->GetItem("image_date")->PutValue( (_variant_t)date ); //填充old字段
m_dbUpdate->Fields->GetItem("image_data")->AppendChunk( varBLOB);//一执行就报错 //加入BLOB类型的数据
m_dbUpdate->Update();
m_dbUpdate->Close();
m_iResult=0;
}catch(_com_error &e)
{
AfxMessageBox(e.Description());
m_iResult= -1;
}
delete[] lpBuffer;
}
return m_iResult;