mysql读写数据流程_流文件读写数据库方法

在vc中采用流指针处理写入数据库的方法如下。

采用_StreamPtr处理Loadfromfile,savetofile,open来处理。

/*

测试插入流文件,

*/

void insert_flow1()

{

_StreamPtr    pwStream;

_bstr_t        strPath("D:\\my\\21.wav");

_bstr_t        strOpen("");

_variant_t    varBLOB;

_variant_t  varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);

HRESULT hr = pwStream.CreateInstance(_uuidof(Stream));

if(SUCCEEDED(hr))

{

pwStream->Type = adTypeBinary;

hr = pwStream->Open(varOptional, adModeUnknown, adOpenStreamUnspecified, strOpen, strOpen);

}

_bstr_t strSql("select (max(id) +1) as id from t_mov1");

m_pRecordset->Open(strSql, _variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic, adLockOptimistic, adCmdText);

variant_t vRet = m_pRecordset->GetCollect("id");

int id = vRet.lVal;

strSql = "select * from t_mov1 where 1 = 0";

m_pRecordset->Close();

m_pRecordset->Open(strSql,  _variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic, adLockOptimistic, adCmdText);

if(SUCCEEDED(hr))

{

pwStream->LoadFromFile(strPath);

m_pRecordset->AddNew(vtMissing, vtMissing);

m_pRecordset->PutCollect("id", (long)id);

m_pRecordset->PutCollect("b_flow", pwStream->Read(adReadAll));

m_pRecordset->Update();

pwStream->Close();

}

}

/*

从数据库中读出流数据

*/

void read_flow1(int id)

{

char    *m_pBuffer;

_StreamPtr    prStream;

_bstr_t        strOpen("");

_variant_t  varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);

HRESULT        hr;

hr = prStream.CreateInstance(_uuidof(Stream));

if(SUCCEEDED(hr))

{

prStream->Type = adTypeBinary;

hr = prStream->Open(varOptional, adModeUnknown, adOpenStreamUnspecified, strOpen, strOpen);

}

CString strSql;

strSql.Format("select * from t_mov1 where id = %d", id);

m_pRecordset->Open((_bstr_t)strSql, _variant_t((IDispatch*)m_pConnection,true),

adOpenDynamic, adLockOptimistic, adCmdText);

if(SUCCEEDED(hr))

{

prStream->Write(m_pRecordset->Fields->GetItem("b_flow")->GetValue());

long lDataSize;

lDataSize = prStream->GetSize();

_variant_t  varBLOB;

//流指针指向首位

prStream->put_Position(0);

//varBLOB.vt = VT_ARRAY | VT_UI1;

//varBLOB.scode = DISP_E_PARAMNOTFOUND;

varBLOB = prStream->Read(adReadAll);

if(varBLOB.vt == (VT_ARRAY | VT_UI1))

{

//分配必要的存储空间

if(m_pBuffer = new char[lDataSize+1])

{

char *pBuf = NULL;

//复制数据到缓冲区m_pBuffer

SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);

memcpy(m_pBuffer, pBuf, lDataSize);

SafeArrayUnaccessData (varBLOB.parray);

}

}

prStream->SaveToFile("d:\\1.wav", adSaveCreateOverWrite);

prStream->Close();

}

}

Powered by ScribeFire.

posted on 2008-02-13 19:22 kenlistian 阅读(1030) 评论(0)  编辑 收藏 引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值