/////////////////////////////////////////////////////////////////////
//ADO保存二进制到数据库的例子,
//使用SafeArrayCreate,SafeArrayPutElement,

//配合_variant_t使用不会造成内存泄漏
/////////////////////////////////////////////////////////////////////

 

 1 static char szTestBin[1024= "12312312321321";
 2 
 3 HRESULT hr;
 4 _variant_t varChunk;
 5 long lngOffset = 0;
 6 UCHAR chData;
 7 SAFEARRAY FAR *psa = NULL;
 8 SAFEARRAYBOUND rgsabound[1];
 9 
10 //Create a safe array to store the array of BYTES 
11 rgsabound[0].lLbound = 0;
12 rgsabound[0].cElements = 1024;
13 psa = SafeArrayCreate(VT_UI1,1,rgsabound);
14 
15 while(lngOffset < 1024)
16 {
17     chData    = (UCHAR)(szTestBin[lngOffset]);
18     hr = SafeArrayPutElement(psa, &lngOffset, &chData);
19 
20     if(FAILED(hr))
21     {
22         printf("错误");
23     }
24 
25     lngOffset++;
26 }
27 
28 lngOffset = 0;
29 
30 //Assign the Safe array  to a variant. 
31 varChunk.vt = VT_ARRAY|VT_UI1;
32 varChunk.parray = psa;
33 
34 CADOParameter pUserData(CADORecordset::typeVarBinary, 1024);
35 pUserData.SetValue((_variant_t)varChunk);
36 cmd.AddParameter(&pUserData);
37 
38 if (!cmd.Execute())
39 {
40     printf("错误");
41 }  

 

相关文章: