none
二维数组通过PutChunk 存入数据库,用GetChunk读出来出现错误 RRS feed

  • 问题

  • //将一个二维数组存入数据库

    ULONGLONG   lDataLen   =   15; //你数据的长度
     _variant_t varBLOB; //定义一个VARIANT变量,   用于向数据库保存二进制数据
     SAFEARRAY *psa;
     SAFEARRAYBOUND rgsabound[2];  
     
     rgsabound[0].lLbound   =   0;
     rgsabound[0].cElements   =   15;
     rgsabound[1].lLbound   =   0;
     rgsabound[1].cElements   = 10  ;
     
     psa   =   SafeArrayCreate(VT_UI1,2,rgsabound);  //创建SAFEARRAY对象
     long rIndices[2]={1,1};
      
     for (long j=0;j<10;j++)
     {
            rIndices[1]=j;
      for( i=0; i<15;i++)
      {
       rIndices[0]=i;
       sVal[j][i]=j*size+i;
       SafeArrayPutElement(psa, rIndices,(void*)&sVal[j][i]);  // 
      }
     }
     
     
     
     m_pRs->AddNew();
     varBLOB.vt   =   VT_ARRAY   |   VT_UI1;  //将varBLOB的类型设置为BYTE类型的数组
     varBLOB.parray   =   psa;   //为varBLOB变量赋值
      m_pRs->Fields->Item[0L]->PutValue(_bstr_t("MXQ"));
     m_pRs->Fields->Item[1L]->AppendChunk(varBLOB);
     m_pRs->Update();

     

    //读出数据

    _variant_t varBLOB2;
     varBLOB2.vt   =   VT_ARRAY   |   VT_UI1;  //将varBLOB的类型设置为BYTE类型的数组 
     long lSize=m_pRs->Fields->Item[1L]->ActualSize;
     varBLOB2=m_pRs->Fields->Item[1L]->GetChunk(lSize);//这个lSize我觉着应该是15*10,但返回是10
     memset(sVal,0,sizeof sVal);//clear
     for (j=0;j<10;j++)
     {
            rIndices[1]=j;
      for( i=0; i<lDataLen;i++)
      {
       rIndices[0]=i;   
       SafeArrayGetElement(varBLOB2.parray, rIndices,(void*)&sVal[j][i]);  //将pBuf指向的二进制数据保存到SAFEARRAY对象psa中
      }
     }

     

    写入数据库时varBLOB.parray的cDims是2,但是读出时varBLOB2.parray的cDims是1,数据肯定也不对了,这是怎么回事,数据库是SqlServer,字段的数据类型是image,采用ADO操作数据库

    2011年6月11日 9:45

答案

  • 建议你做一个测试

    把存入数据库的数据直接读取,看看结果是否正确。

    一般数据库存储不会改变你数据内容,除非你操作不当。

     


    family as water
    2011年6月11日 12:35