流文件读写数据库方法

采用_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();
    }
}

转载:http://www.cppblog.com/kenlistian/archive/2008/02/13/42699.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值