VC++中如何把万能变量中的大数据块读写

    技术2022-05-11  90

    如何用同一段程序可以根据不同的连接字符串把万能变量中的大数据块写到

    DB2、SQL SERVER、ORACLE数据库中   

    示例中: 表结构为 名称(bstrFileName) 大数据块(variantFileData) 表名为:TestDataTable

    m_bstrConnectString为数据库连接字符串

    Save(BSTR bstrFileName, VARIANT variantFileData, long WirteStyle, long *pVal){ // TODO: Add your implementation code here

     

        _ConnectionPtr conn; _bstr_t       sQuery;    // Query for the command HRESULT hr; conn.CreateInstance(__uuidof(Connection));   BSTR bstrTemp; get_DBConnectString(&bstrTemp);//获得数据库连接字符串 SysFreeString(bstrTemp);  conn->ConnectionTimeout = 8;  conn->Open(m_bstrConnectString,"","",adModeUnknown); 

        sQuery=_bstr_t(L"DELETE FROM DiagramXDataTable WHERE SVGFILENAME = '")+_bstr_t(bstrFileName)+_bstr_t(L"'");; conn->Execute(sQuery,NULL,adCmdText);//如果已存在则删除原来的文件

     _CommandPtr   pCommand;  // Command object for insert _ParameterPtr pParam1;  // Parameter to contain BLOB

     _variant_t    vRecsAffected(0L);  _variant_t vNull;   // Dummy variant to fill required function parameters vNull.vt = VT_ERROR; vNull.scode = DISP_E_PARAMNOTFOUND;  pCommand.CreateInstance(__uuidof(Command)); 

     // Associate the Command Object with the Connection Object pCommand->PutRefActiveConnection(conn);  // Set Command Text sQuery=_bstr_t(L"INSERT INTO TestDataTable VALUES ( '")+_bstr_t(bstrFileName)+_bstr_t(L"',? )"); pCommand->PutCommandText(sQuery);  // Set Command Type pCommand->PutCommandType(adCmdText);  // Initialize parameter pointer hr = pParam1.CreateInstance(__uuidof(Parameter)); if (FAILED(hr)) throw ("Unable to create Parameter object");  // Create parameter pParam1 = pCommand->CreateParameter(_bstr_t(bstrFileName), adBinary, adParamInput, variantFileData.parray->rgsabound[0].cElements, variantFileData);

     hr = pCommand->Parameters->Append(pParam1);

     hr = pCommand->Execute(&vRecsAffected, &vNull, adCmdText);

     conn->Close(); 

    读取大数据快到万能变量

    Open(BSTR bstrFileName, long OpenStyle, VARIANT *pVariant, long *pDataSize, long *pval){ // TODO: Add your implementation code here _ConnectionPtr conn; conn.CreateInstance("ADODB.Connection");

     BSTR bstrTemp; get_DBConnectString(&bstrTemp);//获得数据库连接字符串 SysFreeString(bstrTemp); //m_bstrConnectString=L"Provider=SQLOLEDB.1;Password=88888888;Persist Security Info=True;

    //User ID=sa;Initial Catalog=Project;Data Source=188.188.188.200"; //m_bstrConnectString=L"Provider=IBMDADB2.1;Password=88888888;

    //User ID=Admin;Data Source=myTest1;Location=188.188.188.6;Persist Security Info=True";  conn->ConnectionTimeout = 8; conn->Open(m_bstrConnectString,"","",adModeUnknown);  _RecordsetPtr rs; HRESULT hr; hr=rs.CreateInstance("ADODB.Recordset"); _bstr_t bstrSql=_bstr_t(L"select * from DiagramXDataTable where SVGFILENAME='")+_bstr_t(bstrFileName)+_bstr_t(L"'");  hr = rs->Open(bstrSql,_variant_t((IDispatch *)conn,true),adOpenDynamic,adLockPessimistic,adCmdText);  if (rs->adoEOF==VARIANT_FALSE)  {  long lDataSize = rs->GetFields()->GetItem("SVGFILEDATA")->ActualSize;    if(lDataSize > 0)  {   _variant_t   varBLOB;   varBLOB = rs->GetFields()->GetItem("SVGFILEDATA")->GetChunk(lDataSize);   *pVariant=varBLOB.Detach();    *pDataSize=lDataSize;  }   }     rs->Close(); conn->Close(); 


    最新回复(0)