1将Image图像文件存入到数据库中
我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中
要这里有关数据的 *** 作略写,我将一些代码段写成方法,方便直接调用
//根据文件名(完全路径)
public byte[] SetImageToByteArray(string fileName)
{
FileStream fs = new FileStream(fileName, FileModeOpen);
int streamLength = (int)fsLength;
byte[] image = new byte[streamLength];
fsRead(image, 0, streamLength);
fsClose();
return image;
}
//另外,在ASPNET中通过FileUpload控件得到的图像文件可以通过以下方法
public byte[] SetImageToByteArray(FileUpload FileUpload1)
{
Stream stream = FileUpload1PostedFileInputStream;
byte[] photo = new byte[FileUpload1PostedFileContentLength];
streamRead(photo, 0, FileUpload1PostedFileContentLength);
streamClose();
return photo;
}
2从SQL Server数据库读取Image类型的数据,并转换成bytes[]或Image图像文件
//要使用SqlDataReader要加载using SystemDataSqlClient命名空间
//将数据库中的Image类型转换成byte[]
public byte[] SetImage(SqlDataReader reader)
{
return (byte[])reader["Image"];//Image为数据库中存放Image类型字段
}
//将byte[]转换成Image图像类型
//加载以下命名空间using SystemDrawing;/using SystemIO;
using SystemDataSqlClient;/
public Image SetByteToImage(byte[] mybyte)
{
Image image;
MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyteLength);
image = ImageFromStream(mymemorystream);
return image;
}
用ADO方式连的MYSQL, 已经用AppendChunk以二进制插入数据库中,下面是读取的不分,写入相反的方式
void DatabaseFile::GetImage()
{
_RecordsetPtr pRs = NULL;
pRsCreateInstance(__uuidof(Recordset));
_variant_t varChunk;
_variant_t varBLOB;
try
{
CString sql = "select image from visdata where DetectTime = '2008-06-19 11:23:44';";
//Open a Recordset
HRESULT hr = pRs->Open(_variant_t("select from visdata;"),_variant_t((IDispatch ) m_pConnection,true),adOpenKeyset,adLockOptimistic,adCmdText);
//read data
long lDataLength = pRs->Fields->GetItem("image")->ActualSize;//数据长度可以正确获取
varBLOB = pRs->GetFields()->GetItem("image")->GetChunk(lDataLength);
if(varBLOBvt == (VT_ARRAY | VT_UI1))
{
BYTE pBuf = NULL;
pBuf = (BYTE)GlobalAlloc(GMEM_FIXED,lDataLength);//分配空间
hr = SafeArrayAccessData(varBLOBparray,(void )&pBuf);
if (FAILED(hr))
return;
//Build a File
char tmpPath[_MAX_PATH+1];
GetCurrentDirectory( MAX_PATH,tmpPath);
CString strFileName = "\\temp2bmp";//输出的文件名
strFileName = tmpPath+strFileName;
CFile outFile(strFileName,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary );
/要判断文件是否创建成功/
LPSTR buffer = (LPSTR)GlobalLock((HGLOBAL)(pBuf));
outFileWriteHuge(buffer,lDataLength);
GlobalUnlock((HGLOBAL)pBuf);
outFileClose();
SafeArrayUnaccessData (varBLOBparray);
}
pRs->Close();
}
C#保存
Filter="jpg|JPG|GIF|GIF|BMP|BMP";if(ShowDialog()==OK){
stringfullpath=FileName;//文件路径FileStreamfs=newFileStream(fullpath,FileModeOpen);byte[]imagebytes=newbyte[fsLength];br=new(fs);
imagebytes=brReadBytes(ConvertToInt32(fsLength));//打开数据库
con=new
("server=(local);uid=sa;pwd=;database=test");conOpen();
SqlCommandcom=newSqlCommand("insertintotb_08values(@ImageList)",con);
comParametersAdd("ImageList",SqlDbTypeImage);comParameters["ImageList"]Value=imagebytes;com();conClose();
以上就是关于怎么将图片转换成二进制,存入数据库,然后怎么读出来并显示全部的内容,包括:怎么将图片转换成二进制,存入数据库,然后怎么读出来并显示、如何用ado将二进制图片数据存入mysql数据库、SQL数据库二进制数如何转换(sql数据库二进制数据显示)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)