/////////////////////////////////////////////////////////////////////
//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 }
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 }