大家好!我是用的ADO连接数据库,要往数据库表中写入记录
m_pRecordset->PutCollect("r_date_00",_variant_t((float)m_r_date_00));
上面句子中,r_date_00是表中的列名,定义为decimal类型,m_r_date_00为要写入的值,为float类型,现在就是我那个转换有错误,请高手们帮帮忙,应该怎么转换?

解决方案 »

  1.   

    我是直接用sql语句, 
    1.先建个_CommandPtr m_pCmd
    2.再m_pCmd->Parameters->Append( 参数 )参数可如下设置,自己写个函数:
    CString strValue;
    _ParameterPtr m_pParamPtr;m_pParamPtr.CreateInstance( "ADODB.Parameter" );
    m_pParamPtr->Name = _bstr_t(strName);
    m_pParamPtr->Type = adDecimal; // 可查看msado15.tlh
    m_pParamPtr->Size = nSize;
    m_pParamPtr->Direction = enumDirection;strValue.Empty();
    strValue.Format( "%f", nValue );
    m_pParamPtr->Value = _variant_t(strValue);
      

  2.   

    _variant_t((float)m_r_date_00)这个转换不行吗??应该是可以的啊因为int型就是可以这么转的啊_variant_t((int)m_r_date_00)
      

  3.   

    运行的时候出现错误:Unhandled exception in hourlyrain.exe(KERNEL32.DLL):0xE06D7363:Microsoft C++ Exception
    m_pRecordset->PutCollect("date_dat",_variant_t((long)m_date_dat));
    我将int型的m_date_dat转换成bigint型的date_dat就没有错误,不知道是不是decimal类型特殊,反正就是出错。我看了有文章里说SQLSERVER中的SQL_DECIMAL如果转换到VC++中默认为CString类型
      

  4.   

    CComVariant vt;
    vt.vt=VT_BSTR;
    vt="r_date_00";
    m_pRecordset->PutCollect(vt,m_r_date_00);
    或者直接用字段的id,对于数据,数字不用转,字符也要转成variant
      

  5.   

    首先谢谢楼上的答复。
    我用了你说的方法还是出错。
    “或者直接用字段的id”,请问这句什么意思,r_date_00就是字段的ID啊
    “对于数据,数字不用转”,请问数字不用转,包括那些类型的?例如: float,int....