MFC ADO MySql数据库 图片的读写

一、把图片写入MySql

FILE* fp;
int Filelen;
char* a_pData;
struct stat _filestat;
stat("c:\\1.jpg", &_filestat);

if(fp=fopen("c:\\1.jpg","rb"))
{

Filelen = _filestat.st_size;                //读取文件长度
a_pData= (char*)malloc(Filelen);        //按文件长度申请内存空间
//读取文件到分配的内存
if (1 == fread(a_pData, Filelen, 1, fp))        //读取文件到申请的内存中
{
int _ret = true;
}
fclose(fp);
}
CDBAdo dbc;
CString sql;
sql.Format(_T("insert into cardinfo(CardId,PhotoBit) values(?,?)"));

char* CardId="56456456";

SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;  
rgsabound[0].cElements =Filelen;  
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);                 ///创建SAFEARRAY对象 
unsigned char* pSafePtr;
if (NOERROR ==SafeArrayAccessData(psa, (void**)&pSafePtr))
{
memcpy(pSafePtr,a_pData, Filelen);
}
SafeArrayUnaccessData(psa);
VARIANT  varBLOB;
varBLOB.vt = VT_ARRAY | VT_UI1;               ///将varBLOB的类型设置为BYTE类型的数组   
varBLOB.parray = psa;   

dbc.AddParamter(_bstr_t("CardId"),adParamInput,adVarChar,36,(_variant_t)CardId);
dbc.AddParamter(_bstr_t("PhotoBit"),adParamInput,adBinary,Filelen,(_variant_t)varBLOB);

if (dbc.ExecuteCommand(sql,false))
{

 free a_pData;
dbc.CloseConnection();
}
else
{

 free a_pData;
dbc.CloseConnection();
m_strError=dbc.GetLastError();
}

二、读取MySql图片数据

string str;
CDBAdo dbc;
CFile file;
char _sql[200]="";
sprintf_s(_sql, "SELECT * FROM cardinfo where cardid = '%s'", "56456456");
//获取记录
if (dbc.OpenRecordset((CString)_sql))//根据sql语句获取记录集
{
if (0 < dbc.GetRecordCount())
{
int len;
_variant_t  varBLOB;
unsigned char* pSafePtr= NULL;

len=dbc.m_ptrRecordset->Fields->GetItem("photobit")->ActualSize;
varBLOB=dbc.m_ptrRecordset->Fields->GetItem("photobit")->GetChunk(len);

bool res=file.Open(_T("c:\\2.jpg"),CFile::modeWrite|CFile::typeBinary|CFile::modeCreate);

SafeArrayAccessData(varBLOB.parray, (void**)&pSafePtr);
file.Write((void*)pSafePtr,len);
SafeArrayUnaccessData(varBLOB.parray);

file.Close();
}
}

代码有点凌乱,不过亲测是读写成功的~

参考:http://wenku.baidu.com/view/028d6c13a2161479171128b1.html

            http://baike.baidu.com/view/1438508.htm

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值