兄弟们,帮帮忙!关于怎么样添加二进制到sql server中的问题!

kataboy 2003-10-09 10:12:58
首先说一下我的表结构:
表名:mytable
表的字段:
mydate datetime
mytime datetime
mydata image

以下是我操作表的代码:
1。保存的:
 String sql;
char *p;
TMemoryStream *ms = new(TMemoryStream);
p=new BYTE[257];

ms->WriteBuffer(p,256);
ShowMessage(IntToStr(ms->Position));
sql="Insert into mytable values(:pdate,:ptime,:pdata)";

Dm->AQ_Cpp->Close();
Dm->AQ_Cpp->SQL->Clear();
Dm->AQ_Cpp->SQL->Text=sql;
Dm->AQ_Cpp->Parameters->ParamByName("pdate")->DataType=ftDate;
Dm->AQ_Cpp->Parameters->ParamByName("pdate")->Value=Date();
Dm->AQ_Cpp->Parameters->ParamByName("ptime")->DataType=ftTime;
Dm->AQ_Cpp->Parameters->ParamByName("ptime")->Value=Time();
Dm->AQ_Cpp->Parameters->ParamByName("pdata")->LoadFromStream(ms,ftBlob);
Dm->AQ_Cpp->ExecSQL();
delete p;
delete ms;

以下是读取的:
 Dm->AQ_Cpp->Close();
Dm->AQ_Cpp->SQL->Clear();
Dm->AQ_Cpp->SQL->Text="select * from mytable";
Dm->AQ_Cpp->Open();

TMemoryStream *ms = new(TMemoryStream);
TBlobField *pbf;
char *p;
p=new BYTE[257];
ms->Clear();
pbf=(TBlobField*)Dm->AQ_Cpp->Fields->FieldByName("mydata");
pbf->SaveToStream(ms);
ms->ReadBuffer(p,256);//在这里就出错了。错误信息是:Stream read error!
for (int i=0;i<256;i++)
{
ShowMessage(IntToStr((int)p[i]));
}
delete ms;
delete p;

请大家帮我看看,为什么在读取时出错了,谢谢大家!
...全文
34 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kataboy 2003-10-10
  • 打赏
  • 举报
回复
谢谢!
domustdo 2003-10-09
  • 打赏
  • 举报
回复
它会转化为ASCII字符c
domustdo 2003-10-09
  • 打赏
  • 举报
回复
p=new BYTE[257];
p[0]=99;
99用一个字节表示?这应该不行的
kataboy 2003-10-09
  • 打赏
  • 举报
回复
谢谢,楼上的,可以了,不过问题又出来了。
我将读取的函数改为以下:

Dm->AQ_Cpp->Close();
Dm->AQ_Cpp->SQL->Clear();
Dm->AQ_Cpp->SQL->Text="select * from mytable";
Dm->AQ_Cpp->Open();
Dm->AQ_Cpp->Next();
TMemoryStream *ms = new(TMemoryStream);
TBlobField *pbf;
char *p;
p=new BYTE[257];
ms->Clear();
pbf=(TBlobField*)Dm->AQ_Cpp->Fields->FieldByName("mydata");
pbf->SaveToStream(ms);
ms->Position=0;
ms->ReadBuffer(p,256);
ListBox1->Items->Clear();
for (int i=0;i<256;i++)
{
ListBox1->Items->Add(IntToStr((int)p[i]));
}
delete ms;
delete p;

保存的为:
String sql;
char *p;
TMemoryStream *ms = new(TMemoryStream);
p=new BYTE[257];
p[0]=99;
ms->WriteBuffer(p,256);
ShowMessage(IntToStr(ms->Position));
sql="Insert into mytable values(:pdate,:ptime,:pdata)";

Dm->AQ_Cpp->Close();
Dm->AQ_Cpp->SQL->Clear();
Dm->AQ_Cpp->SQL->Text=sql;
Dm->AQ_Cpp->Parameters->ParamByName("pdate")->DataType=ftDate;
Dm->AQ_Cpp->Parameters->ParamByName("pdate")->Value=Date();
Dm->AQ_Cpp->Parameters->ParamByName("ptime")->DataType=ftTime;
Dm->AQ_Cpp->Parameters->ParamByName("ptime")->Value=Time();
Dm->AQ_Cpp->Parameters->ParamByName("pdata")->LoadFromStream(ms,ftBlob);
Dm->AQ_Cpp->ExecSQL();
delete p;
delete ms;


为什么我取取的数据第一个的值不是99呢????
domustdo 2003-10-09
  • 打赏
  • 举报
回复
pbf->SaveToStream(ms);
ms->Position=0; //加上这句试试
ms->ReadBuffer(p,256);

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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