ado 读写二进制数据
来源:互联网 发布:如何在淘宝网上开店铺 编辑:程序博客网 时间:2024/05/05 21:13
- 写二进制数据:
- pRs->AppendChunk(_T("tpContent"),buff,dwLen);
- 读二进制数据:
CADOFieldInfo info;
pRs->GetFieldInfo(_T("tpcontent"),&info); //topology设备上下文,在数据表中以二进制存在
void *buff=malloc(info.m_lSize);
memset(buff,0,info.m_lSize);
pRs->GetChunk(_T("tpcontent"),buff); //使用tpcontent字段的内容来填充buff
pRs是自己封装的一个类,CADORecordset,其他的定义:
_RecordsetPtr m_pRecordset
BOOL CADORecordset::AppendChunk(LPCTSTR lpFieldName, LPVOID lpData, UINT nBytes){FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);return AppendChunk(pField, lpData, nBytes);}BOOL CADORecordset::AppendChunk(int nIndex, LPVOID lpData, UINT nBytes){_variant_t vtIndex;vtIndex.vt = VT_I2;vtIndex.iVal = nIndex;FieldPtr pField = m_pRecordset->Fields->GetItem(vtIndex);return AppendChunk(pField, lpData, nBytes);}BOOL CADORecordset::AppendChunk(FieldPtr pField, LPVOID lpData, UINT nBytes){HRESULT hr;_variant_t varChunk;long lngOffset = 0;UCHAR chData;SAFEARRAY FAR *psa = NULL;SAFEARRAYBOUND rgsabound[1];try{//Create a safe array to store the array of BYTES rgsabound[0].lLbound = 0;rgsabound[0].cElements = nBytes;psa = SafeArrayCreate(VT_UI1,1,rgsabound);while(lngOffset < (long)nBytes){chData= ((UCHAR*)lpData)[lngOffset];hr = SafeArrayPutElement(psa, &lngOffset, &chData);if(FAILED(hr))return FALSE;lngOffset++;}lngOffset = 0;//Assign the Safe array to a variant. varChunk.vt = VT_ARRAY|VT_UI1;varChunk.parray = psa;hr = pField->AppendChunk(varChunk);if(SUCCEEDED(hr)) return TRUE;}catch(_com_error &e){dump_com_error(e);return FALSE;}return FALSE;}
BOOL CADORecordset::GetFieldInfo(FieldPtr pField, CADOFieldInfo* fldInfo){memset(fldInfo, 0, sizeof(CADOFieldInfo));strcpy(fldInfo->m_strName, (LPCTSTR)pField->GetName());fldInfo->m_lDefinedSize = pField->GetDefinedSize();fldInfo->m_nType = pField->GetType();fldInfo->m_lAttributes = pField->GetAttributes();if(!IsEof())fldInfo->m_lSize = pField->GetActualSize();return TRUE;}BOOL CADORecordset::GetChunk(LPCTSTR lpFieldName, LPVOID lpData){FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);return GetChunk(pField, lpData);}BOOL CADORecordset::GetChunk(int nIndex, LPVOID lpData){_variant_t vtIndex;vtIndex.vt = VT_I2;vtIndex.iVal = nIndex;FieldPtr pField = m_pRecordset->Fields->GetItem(vtIndex);return GetChunk(pField, lpData);}BOOL CADORecordset::GetChunk(FieldPtr pField, LPVOID lpData){long lngSize, lngOffSet = 0;_variant_t varChunk; UCHAR chData;HRESULT hr;long lBytesCopied = 0;lngSize = pField->ActualSize;while(lngOffSet < lngSize){ try{varChunk = pField->GetChunk(ChunkSize);//Copy the data only upto the Actual Size of Field. for(long lIndex = 0; lIndex <= (ChunkSize - 1); lIndex++) { hr= SafeArrayGetElement(varChunk.parray, &lIndex, &chData); if(SUCCEEDED(hr)) { //Take BYTE by BYTE and advance Memory Location //hr = SafeArrayPutElement((SAFEARRAY FAR*)lpData, &lBytesCopied ,&chData); ((UCHAR*)lpData)[lBytesCopied] = chData; lBytesCopied++; } else break; }lngOffSet += ChunkSize;}catch(_com_error &e){dump_com_error(e);return FALSE;}}lngOffSet = 0;return TRUE;}
- ado 读写二进制数据
- 读写二进制字段数据
- Java读写二进制数据
- sqlite3 读写二进制数据
- QDataStream 二进制数据读写
- ADO写二进制数据时的注意事项
- ASP+ADO实现数据读写简单示例
- ASP+ADO实现数据读写简单示例
- qt中读写二进制数据的问题
- 关于读写注册表二进制数据的问题
- VB.net读写二进制数据方法
- python与C的数据二进制读写
- matlab读写raw二进制数据 bin文件
- 二进制读写
- C#中通过使用ADO.NET读写BLOB数据
- 用c++对mysql进行二进制数据的读写
- python读写二进制数据的处理方理
- 用二进制读写数据要比文本文件快
- COJ 1026 乘积最大 DP+高精度
- PowerDesigner15使用时的十五个问题
- js 闭包
- 项目步骤
- java问题诊断方法及工具
- ado 读写二进制数据
- SQL Server 2008 下载地址
- CC++笔试经典题目 1
- linux下与windows下的换行符
- operator++()和operator++(int)的区别
- PendingIntent getXXX
- javascript
- msxml解析xml示例
- 关于更改成中文的命令