我想要将一个BYTE类型的数组放进sql server
但是VC默认的数据库录入方法是:比如 
_variant_t Holder, strQuery;
strQuery = "INSERT INTO buf(buf, length) VALUES('"+ temp +"', '"+ int2str(sizeof/(TypeMember)) +"')";
theApp.ADOExecute(theApp.m_pADOSet, strQuery);也就是说'"+ +"'里面的东西,VC只接受CString格式!我如果把BYTE格式的东西放进'"+ 变量 +"'去,编译器就会报错!!!
求教该怎样把BYTE数组放进去啊!!!!

解决方案 »

  1.   

    把BYTE的内容转为0x????00字符串INSERT INTO( byte_field)
    VALUES( 0x??????00 )
      

  2.   

    问题就在于
    如果BYTE数组里面存在0的话,转换成字符串后就自动截止了
    所以不能走转字符串的路
      

  3.   

    不会吧, 0 ==> '00'了 怎么会截止呢?
    莫非你的BYTE 转字符串是以string类型作参数的?
      

  4.   

    我是定义了一个结构
    里面有int,float,char。cstring等好多数据类型
    然后用memcpy复制到BYTE数组里面
      

  5.   

    参考一下吧, odbc方式的class CMyRecord : public CRecord
    {
    ...
    //{{AFX_FIELD(CImageRecord, CRecordset)
    CLongBinary m_image;
    //}}AFX_FIELD
    ...
    };BYTE src[LEN];
    CMyRecord rsImg;rsImg.AddNew();
    rsImg.m_image.m_dwDataLength = LEN;HGLOBAL hGlobal   = GlobalAlloc(GPTR, LEN);
    rsImg.m_image.m_hData = GlobalLock(hGlobal);memcpy(rsImg.m_image.m_hData, src, LEN);rsImg.SetFieldDirty(&rsImg.m_image);
    rsImg.SetFieldNull(&rsImg.m_image, FALSE);
    rsImg.Update();可以在网上找找ado的,操作更方便一些
      

  6.   

    首先数据库字段类型设置为varbinary,以下是我写过的一端代码,希望有点帮助
    BOOL PutCollect(LPCTSTR strFieldName, PBYTE pBuff, DWORD dwSize )
    {
    ASSERT(m_pRecordset != NULL );
    #ifdef _DEBUG
    if( GetFieldType(strFieldName) != adVarBinary )
    {
    m_strLastError.Format(_T(" 你要存贮的字段与变量的数据类型不符. "));
    TRACE(_T("Warning: 你要存贮的字段与变量的数据类型不符; 文件: %s; 行: %d\n"), __FILE__, __LINE__);
    }
    #endif     SAFEARRAY FAR* psa;
        SAFEARRAYBOUND rgsabound[1];
        rgsabound[0].lLbound = 0;    
        rgsabound[0].cElements = dwSize;

        // create a single dimensional byte array
        psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
        
        // set the data of the array with data in the edit box
    void *pByte;
        if(SafeArrayAccessData(psa,(void **)&pByte) == NOERROR)
            memcpy(pByte, pBuff, dwSize);
        SafeArrayUnaccessData(psa);

    _variant_t vt;
        vt.vt = VT_ARRAY | VT_UI1;
        vt.parray = psa;

    BOOL bSucc = PutCollect(strFieldName, vt);// LocalFree( (HLOCAL)pByte );
    // SafeArrayDestroy( psa );

    //delete []pByte; return bSucc;
    }
      

  7.   

    请问我为什么一用PutCollect系统就报错啊!!!
    我以前是用SQL 语句进行添加修改删除的
    现在我的程序中用sql语句+ADOSet->Open的方式对数据库进行操作一点问题都没有
    但是一用ADOSet->Addnew() 或者 ADOSet->MoveFirst()等语句,编译时没有问题
    但是运行时报错!!!!只有ADOSet->GetCollect(,)可以正常工作!!!
    是不是sql server 有什么设置啊????
      

  8.   

    顶啊!!!
    请问我为什么一用PutCollect系统就报错啊!!!
    我以前是用SQL 语句进行添加修改删除的
    现在我的程序中用sql语句+ADOSet->Open的方式对数据库进行操作一点问题都没有
    但是一用ADOSet->Addnew() 或者 ADOSet->MoveFirst()等语句,编译时没有问题
    但是运行时报错!!!!只有ADOSet->GetCollect(,)可以正常工作!!!
    是不是sql server 有什么设置啊????