日期:2014-05-18  浏览次数:20461 次

高难度问题 如何一次读取多张二进制类型的图片
绝对高难度问题

数据库 字段 为 roadname roadimages 其中一个roadname 对应多张图片 图片为一个二进制流字段roadimages  

比如 红旗路 下 有多张图片  
   
现要求 点击按钮 通过roadname 得到这些图片 有几张就显示几张

注:要网页形式的 不要 winform的  

谢谢!! 我做了一个datalist的例子 但只能一次读取好几张图片 但图片都是同一副

有代码更好 没有给点思路也行 多谢各位大牛!! 急!!!!



------解决方案--------------------
var dr = DB.ExecuteReader(select roadimages from table where roadname='皇后大道')

取出来的数据 

var str = "";
while(dr.Read())
{
str = str+"<img src='"+dr["roadimages "]+"' />"
}

Response.Write(str);
------解决方案--------------------
探讨

var dr = DB.ExecuteReader(select roadimages from table where roadname='皇后大道')

取出来的数据

var str = "";
while(dr.Read())
{
str = str+"<img src='"+dr["roadimages "]+"' />"
}

Response.Writ……

------解决方案--------------------
数据库中存储此图片的地址,这样做的好处很明显

1.可以节省数据库的存储空间
2.当数据库崩溃后,图片资源不会丢失
3.向数据库中插入图片时,需要先将图片压缩成二进制表示形式,而从数据库中查询图片时,则需要将二进制流转换为图片,这在频繁查询时会影响程序的性能

二进制流:参考:http://tech.ddvip.com/2008-04/120816180543862_2.htmlSQL Server:存储图像和BLOB文件系列
------解决方案--------------------
var dr = DB.ExecuteReader(select roadimages from table where roadname='皇后大道')
var str = "";
while(dr.Read())
{
if(!string.isnullOrEmpty)
str = str+["roadimages "]+"|";
else
str = ["roadimages "]
}
先读出来吧~
然后用类似这种方式显示
MemoryStream ms = new MemoryStream((Byte[])dr["name"]);
Bitmap image = new Bitmap(ms);
string filepath = Server.MapPath("Files/");
DirectoryInfo dir = new DirectoryInfo(filepath);
FileInfo[] filecount = dir.GetFiles();
int i = filecount.Length;
imagename = filepath + ((i + 1) + ".jpg");
image.Save(imagename);
dr.Close();
Image1.ImageUrl = "Files/" + ((i + 1) + ".jpg");