手机铃声的文件都是一些特殊格式,我们将它以char型存在sql server数据库中。写入数据库中是一个byte一个byte写的,可现在我不知道怎么去读出它来了。
文件内容如下
~ | BEGIN:IMELODY
VERSION:1.2
FORMAT:CLASS1.0
MELODY:*3g3g3*4c3c3e3g3d3c3e1d2c3e3d3c3*3h2a3g3g1*4c2c3d3e3g3d3
END:IMELODY如果         memcpy(szUserData2,(char *) _bstr_t(pRstStores->Fields->GetItem("msg")->Value),len) ;
之类的方法只能取到头三位字符(因为他有结束符)
我不知道怎样在毫不改变的将它完整取出,还望高手指点!

解决方案 »

  1.   

    char是以'\0'作为结束标志的。建议以blob的形式存入数据库。
    下面是我的使用VARIANT,SAFEARRAY,SAFEARRAYBOUND的例子:
    CFile file;
    if (!file.Open (filename ,CFile::modeRead))
    return 2;
    DWORD   filesize=file.GetLength ();
    char *m_pBuffer;
    m_pBuffer=new char[filesize+1];
    if (file.ReadHuge (m_pBuffer,filesize)!=filesize)
    return 1;
    char* pwritebase=m_pBuffer;      
    VARIANT varBlob;
    SAFEARRAY* psa;
    SAFEARRAYBOUND safebound[1];    
    if(pwritebase)
    {
    safebound[0].lLbound =0;
    safebound[0].cElements =filesize;
    psa=SafeArrayCreate(VT_UI1,1,safebound);
    for (long i=0;i<(long)filesize;i++)
    SafeArrayPutElement(psa,&i,pwritebase++);
    varBlob.vt =VT_ARRAY | VT_UI1;
    varBlob.parray =psa;
    }
    sqltext="insert into ";
    sqltext+=(_bstr_t)tablename;
    sqltext+=" (id,parentid,bedelete,data) values (?,?,0,?)";
    m_commandptr.CreateInstance (__uuidof(Command));
    m_commandptr->ActiveConnection =papp->m_pConnection ;
    m_commandptr->CommandText =sqltext;
    m_commandptr->CommandType =adCmdText;
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("tableitemid",adInteger,adParamInput,4,COleVariant((short)tableitemid)));
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("parentid",adInteger,adParamInput,4,COleVariant((short)pitem->parentid )));
    m_commandptr->Parameters ->Append (m_commandptr->CreateParameter ("data",/*adLongVarBinary*/adVarBinary,adParamInput,filesize+1,varBlob));
    m_commandptr->Execute (NULL,NULL,adCmdUnknown); delete []m_pBuffer;
      

  2.   

    非常感谢“ZHENG017() ”先生的帮助!只是我希望从数据库中读出。
    现在能按位的写进去,只是不知如何读出来。不知您还能否提供一点读出的代码?有劳了