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

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

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();
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值