如何用同一段程序可以根据不同的连接字符串把万能变量中的大数据块写到
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();