一个如何将二进制数据存储到Sql Server数据库中的贴子!希望大家来支持一下!
为了以后大家不用烦,我将我已经成功了的代码给大家看看,同时谢谢domustdo(大头) 和我的好兄弟蛊惑仔,小H,小E,小熊和小光!
表名:mytable
表的字段:
mydate datetime
mytime datetime
mydata image
以下是一个显示二进制的函数:
LPSTR HexToASCii(char* buff, DWORD buffsize)
{
static LPSTR String = NULL;
if(String) { delete String; String = NULL; }
if( (buff==NULL)||(buffsize==0)||(String) ) return 0;
DWORD StrSize = buffsize * 3 + 2;
String = new char[StrSize]; // 申请了内存空间
memset(String,0,StrSize);
BYTE chTmp=NULL;
DWORD chAnd=0x000000F0;
DWORD StrIdx=0, index=0, ii;
for( index; index<buffsize; index++ )
{
for( ii=0; ii<3; ii++,StrIdx++)
{
if(ii==2) String[StrIdx] = ' '; else
{
if(ii) chAnd =0x0000000F; else chAnd = 0x000000F0;
chTmp = char(buff[index]&chAnd); // chAnd = ~chAnd;
if(chTmp>0x0F) chTmp = chTmp >> 4;
if(chTmp<0x0A) chTmp = chTmp + '0'; else chTmp = chTmp + ('A'-10);
String[StrIdx] = chTmp;
}
}//End of for( ii=0; ii<3; ii++,StrIdx++)
}//End of for( index; index<buffsize; index++ )
String[StrIdx] = NULL;
return String;
}
以下是我用来保存二进制数据到数据库的代码:
String sql;
char *p;
TMemoryStream *ms = new(TMemoryStream);
p=new BYTE[257];
ShowMessage(HexToASCii(p,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();
Dm->AQ_Cpp->Last();
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);
ShowMessage(HexToASCii(p,257));
ListBox1->Items->Clear();
for (int i=0;i<256;i++)
{
ListBox1->Items->Add(IntToStr((int)p[i]));
}
delete ms;
delete p;
****************************************
希望以上代码对大家有帮助!