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