vc++ 使用command 对象通过parameter 实现插入二进制数据

想通过command 执行多条记录,避开申请recordset 的开销,找了好长时间终于调试成功了喔,幸福啊

以下是使用步骤

   _CommandPtr cmd;
   cmd.CreateInstance(__uuidof(Command));
   cmd->CommandType=adCmdText;
   cmd->CommandText=_T("INSERT INTO TARGET (TARGETID,PICTURE) VALUES(?,?)");
    cmd->ActiveConnection = m_Conn;

   //添加参数
   CFile m_File;
   ULONGLONG datalength;
   BYTE *filedata;
   VARIANT varChunk;
   SAFEARRAY *psa;
   SAFEARRAYBOUND rgsabound[1];

    //读取图片数据

//m_Pic_List 是存放图片文件路径的数组

for ( int i = 0 ; i < m_Pic_List.Count() ; i++ )
   {

    m_File.Open(m_Pic_List[i],CFile::modeRead|CFile::typeBinary);
    datalength = m_File.GetLength();
    filedata = new BYTE[datalength];
    m_File.Read(filedata,datalength);
    m_File.Close();   
    
    rgsabound[0].cElements = datalength;
    rgsabound[0].lLbound = 0;
    psa = SafeArrayCreate(VT_UI1,1,rgsabound);
    for (long index =0; index < datalength; index++ )
    {
     SafeArrayPutElement(psa,&index,&filedata[index]);
    }
    varChunk.vt = VT_ARRAY|VT_UI1;
    varChunk.parray = psa;
    
    //给参数赋值
    cmd->Parameters->Refresh();
    _ParameterPtr param = cmd->CreateParameter(_T("TARGETID"),adInteger,adParamInput,sizeof(int),_variant_t(targetid));
    cmd->Parameters->Append(param); 
    param = cmd->CreateParameter(_T("PICTURE"),adLongVarBinary,adParamInput,datalength,varChunk);
    cmd->Parameters->Append(param);
    cmd.Execute(NULL,NULL,NULL);
    
    //清空参数值
    cmd->Parameters->Delete(_T("TARGETID"));
    cmd->Parameters->Delete(_T("PICTURE"));
       
      }

这是一本ado的详细资料,需要机器安装office2003。至于为什么在它的目录下,我也在寻找答案
c:/program files/common files/microsoft shared/office10/2052/ado210.chm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值