读书人

ado 写 binary字段有关问题.帮小弟我跑

发布时间: 2012-05-09 12:13:59 作者: rapoo

ado 写 binary字段问题.......帮我跑跑这段代码!!
数据库表名为:tmptab
字段:userid(int),txt(binary)
代码目的:把结构体MYDATA存入数据库的txt字段(注:类型为bianry,其他的如image等都可以正确存入)
报错信息:
error:在此环境中不允许操作
Unknown error 0x800A0C93
哪为高手帮忙调通在下感激不尽!

C/C++ code
#include <stdio.h>#include <stdlib.h>#include <iostream>#include <fstream>#include <string>#include <sstream>#import "msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")using namespace ADOCG;#include <ole2.h>#include <conio.h>void TESTHR(HRESULT x){    if (FAILED(x))    {        _com_issue_error(x);    }}struct MYDATA{    short No1;      short No2;      short No3;      short No4;   };void Tout(struct MYDATA *sts){    printf("\n%d  %d  %d  %d\n",sts->No1, sts->No2, sts->No3, sts->No4);}bool writebolo2sql(const char* connstr){    if (FAILED(::CoInitialize(NULL)))    {        std::cout << "初始化ADO失败!" << std::endl;        return false;    }    _RecordsetPtr  m_recordset;    _ConnectionPtr m_connection;    _CommandPtr    m_command;    _ParameterPtr  m_parameter;    TESTHR(m_connection.CreateInstance(__uuidof(Connection)));    TESTHR(m_recordset.CreateInstance(__uuidof(Recordset)));    m_connection->ConnectionTimeout = 10;    m_connection->Open(_bstr_t(connstr),"","",NULL);    m_recordset->Open(        "select * from tmptab",        _variant_t((IDispatch*)m_connection,true),        adOpenStatic,        adLockOptimistic,        adCmdText);    m_recordset->AddNew();    m_recordset->PutCollect("userid", _variant_t(long(1007)));    struct MYDATA data;    data.No1 = 3;    data.No2 = 4;    data.No3 = 5;    data.No4 = 6;    int len = sizeof(struct MYDATA);    try    {      VARIANT varBLOB;        SAFEARRAY *psa;        SAFEARRAYBOUND rgsabound[1];        rgsabound[0].lLbound   =   0;        rgsabound[0].cElements   =   len;        psa = SafeArrayCreate(VT_UI1,1,rgsabound);        BYTE* pByte;        if(SafeArrayAccessData(psa,(void**)&pByte) == NOERROR)        memcpy((LPVOID)pByte,(LPVOID)&data,len);        SafeArrayUnaccessData(psa);           varBLOB.vt = VT_ARRAY | VT_UI1;        varBLOB.parray = psa;        m_recordset->Fields->GetItem("txt")->AppendChunk(varBLOB);      m_recordset->Update();//      Tout(&data);    }    catch(::_com_error& e)    {        printf("error:%s\n%s\n", (const char*)e.Description(), e.ErrorMessage());        return false;    }    ::CoUninitialize();    return true;}int main(int argc, char* argv[]){    if(!writebolo2sql("Provider=sqloledb;Data Source=自己填;\        Initial Catalog=自己填;User ID=自己填;Password=自己填")        printf("----have error-------");    printf("\n-------end--------\n");    return 0;}


[解决办法]
直接用value赋值就可以

读书人网 >VC/MFC

热点推荐