请问 MSSQL 中 varbinary型数据 如何读到BYTE[] 数组 急!!!!!!!!!!在线等

andy888666 2007-10-15 02:51:32
BOOL CAdoRecordSet::GetCollect(LPCSTR strFieldName, BYTE &value)
{
ASSERT(m_pRecordset != NULL);

try
{

value = vartoby(m_pRecordset->GetCollect(_variant_t(strFieldName)));
return TRUE;
}
catch (_com_error e)
{
value = 0;
return FALSE;
}
}
请问 这个函数封装了只能读一个BYTE ,如果我这个varbinary列有很多数据 改怎么写呢?放到BYTE数据

vartoby的返回值是BYTE 有没有返回BYTE[]的啊?

希望各位给写代码
...全文
558 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
shwill123 2008-12-20
  • 打赏
  • 举报
回复

我也碰到同样的问题,我在数据库中定义了一个binary类型的字段,大小为30个字节,在VC定义了BYTE buff[30]
我将数据填到buff中后,我想将buff中的数据保存到数据库中的binary字段中,该如何保存? 保存进去后该如何将他读出?
shanhqk 2007-10-17
  • 打赏
  • 举报
回复
BOOL CAdoRecordSet::GetCollect(LPCSTR strFieldName, BYTE &value)
{
ASSERT(m_pRecordset != NULL);
try
{
_variant_t var;
var m_pRecordset- >GetCollect(_variant_t(strFieldName));
switch (var.vt)
{
case VT_BSTR://字符串
case VT_LPSTR://字符串
case VT_LPWSTR://字符串
value = (LPCTSTR)(_bstr_t)var;
}
return TRUE;
}
catch (_com_error e)
{
value = "";
return FALSE;
}
}
先使用这个函数,调试,看得到的value是什么结果,告诉我。

另外LZ 使用的数据库是什么数据库,开发环境是什么?程序代码和数据库中的部分数据可以公开吗?
如果可以公开,发到的邮箱:shanhqk@163.com我帮LZ看看
andy888666 2007-10-17
  • 打赏
  • 举报
回复
数据是GPRS模块采集上来的 以二进制的形式存入数据库,我的目的就是读出这个二进制字段的内容,做解析,可是第一步
读还没读出了,各位请帮帮我啊!怎么从数据库里读出二进制数阿
shanhqk 2007-10-17
  • 打赏
  • 举报
回复
使用AfxMessageBox(value)看看结果是否正确?1
shanhqk 2007-10-17
  • 打赏
  • 举报
回复
BOOL CAdoRecordSet::GetCollect(LPCSTR strFieldName, CString value)//返回值是CString类型的,
使用时再转化。
andy888666 2007-10-17
  • 打赏
  • 举报
回复
//数据库MSSQL2000 开发工具VC6 数据库部分可以公开

BOOL CAdoRecordSet::GetCollect(LPCSTR strFieldName, BYTE* value)
{
ASSERT(m_pRecordset != NULL);
VARIANT varChunk;


long lngLogoSize,lngOffSet;
lngOffSet=lngLogoSize=0;
try
{
lngLogoSize = m_pRecordset->Fields->Item["INDATE"]->ActualSize; //INDATE二进制字段 大小可以读出来了

_variant_t varChunk = m_pRecordset->Fields->Item["INDATE"]->GetChunk(lngLogoSize );
SafeArrayAccessData(varChunk.parray, (void **)&value);
--------------------------------------------------------------------------------------
varChunk = m_pRecordset->GetCollect(_variant_t(strFieldName));
SafeArrayAccessData(varChunk.parray, (void **)&value);
BYTE buf[100];
for(long index=0;index<100;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}

return TRUE;
}
catch (_com_error e)
{
value = 0;
return FALSE;
}
return FALSE;
}


_variant_t varChunk = m_pRecordset->Fields->Item["INDATE"]->GetChunk(lngLogoSize ); 这句总是报错


varChunk = m_pRecordset->GetCollect(_variant_t(strFieldName));
SafeArrayAccessData(varChunk.parray, (void **)&value);
BYTE buf[100];
for(long index=0;index<100;index++)
{
::SafeArrayGetElement(varChunk.parray,&index,buf+index);
}
这几句value总是存不进来,郁闷死了

andy888666 2007-10-17
  • 打赏
  • 举报
回复
value = (LPCTSTR)(_bstr_t)var; 这句话编译不过 cannot convert from 'const char *' to 'unsigned char'

shanhqk 2007-10-15
  • 打赏
  • 举报
回复
如果是一个字符串类型的
_variant_t var;
var m_pRecordset- >GetCollect(_variant_t(strFieldName));
switch (var.vt)
{
case VT_BSTR://字符串
case VT_LPSTR://字符串
case VT_LPWSTR://字符串
strValue = (LPCTSTR)(_bstr_t)var;
}
使用这个方法能不能读取到数据?
如果可以读取到,那么处理起来就比较好处理了。
另外:使用这个主要目的是什么呀?可以说说吗?
long long ll;//也就是需要一个可以占8个字节的数。
sscanf(strValue, "%X", &ll);
凤矶 2007-10-15
  • 打赏
  • 举报
回复
_variant_t没有BTYE[],如果一个字段有几个BYTE,那不就成WORD,DWORD,int64
GetCollect是要读出类型匹配的数值,哪有与BTYE[]匹配的_variant_t
andy888666 2007-10-15
  • 打赏
  • 举报
回复
这个我知道, 具体怎么读才是关键 GetCollect方法返回字符串和数值型我用过
就是没有用它返回BTYE[]类型
value = vartoby(m_pRecordset- >GetCollect(_variant_t(strFieldName)));
可以返回一个BTYE 可BTYE[]呢?

我查了查好象 AppendChunk,GetChunk
可以实现 哪位大哥给个例子啊
凤矶 2007-10-15
  • 打赏
  • 举报
回复
用这个读GetCollect(LPCSTR strFieldName, long &value);
-----varbinary
只有数据库有这个类型,_variant_t和VC里没有
andy888666 2007-10-15
  • 打赏
  • 举报
回复
shunruo 看不懂你想说什么
凤矶 2007-10-15
  • 打赏
  • 举报
回复
CAdoRecordSet::GetCollect(LPCSTR strFieldName, long &value)
重要的内容,不是形式
andy888666 2007-10-15
  • 打赏
  • 举报
回复
谢谢shanhqk 的关注 我对_variant_t 类不熟悉,所以我也不知道是什么类型.
可建表时 数据库字段设为varbinary类型了 数据是0xfff3f030400089之类的


这样问吧 VC怎样读写varbinary类型数据,查了一天了还没有头绪,AppendChunk,GetChunk好象可以 可是具体怎么用啊!
shanhqk 2007-10-15
  • 打赏
  • 举报
回复
1)首先使用var.vt判断一下读取到的类型是什么,然后再作下一步的提问,我想就是VT_BSTR,LZ可以先看看是不是再说其他的
andy888666 2007-10-15
  • 打赏
  • 举报
回复
MSSQL 中某字段存放的varbinary型数据,十六进制的 怎么才能顺利让它进入BYTE[] 啊!
shanhqk 2007-10-15
  • 打赏
  • 举报
回复
如果是一个字符串类型的
_variant_t var;
var m_pRecordset- >GetCollect(_variant_t(strFieldName));
switch (var.vt)
{
case VT_BSTR://字符串
case VT_LPSTR://字符串
case VT_LPWSTR://字符串
strValue = (LPCTSTR)(_bstr_t)var;
}
这样就得到一个字符串。
其他的就是把字符串转为BYTE数组中。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧