m_pRecordset->PutCollect("Value",struct_WaveStor.Value); 
这样写入时总出错。
"Value"在数据库中定义的是binary类型。不能用BLOB类型的函数来存储。
struct_WaveStor是自定义的结构体,Value是其中的一个BYTE型数组 
struct PcVibWave
{
    BYTE Value[4096];
};
struct PcVibWave struct_WaveStor;

解决方案 »

  1.   

    把你的数据放入SAFEARRAY中,作为自定义数据存储。
    下面是一个例子,仅供参考:
    VARIANT var;
    SAFEARRAY *psa;
    BYTE *pByte = NULL; VariantInit(&var);
    psa = ::SafeArrayCreateVector(VT_UI1, 0, dwRealLen);
    ::SafeArrayAccessData(psa, (void**) &pByte);
    memcpy(pByte, saveISM.m_Msg.GetMsg(), dwRealLen);
    var.vt = VT_ARRAY | VT_UI1;
    var.parray = psa;
    pRst->GetFields()->GetItem(FIELD_DATAIRISMSG_MSG)->AppendChunk(var);
    ::SafeArrayUnaccessData(psa);
      

  2.   

    不能用AppendChunk(var); SQL SERVER里面只有Text和Image类型是BLOB.
      

  3.   

    pRst的定义如下:
    CRecordSet * pRst;
      

  4.   


    for(long i=0;i<(long)sizeof(struct_WaveStor.Value);i++)
    ///将vt指向的二进制数据保存到SAFEARRAY对象psa中
       SafeArrayPutElement(psa,&i,*(struct_WaveStor+4)++);我要存的字段是结构体中的第5个字段,struct_WaveStor是通过memcpy()方法从别处拷贝过来的。
    编译的时候为什么会提示:
    error C2678: binary '+' : no operator defined which takes a left-hand operand of type 'struct PcVibWave' (or there is no acceptable conversion)
      

  5.   

    用了一下午时间,终于把问题解决了,呵呵
    感谢gwinner(动力引擎)的热心提示,不过我最终还是用别的方法(参考BLOB文件的存储方法)
    编写了一段程序。