很久没有写过代码了,今天搞一下,的确又生疏了!真可悲,都是给某人害的,总是以为学历=能力,自以为是。哎算了,还是说说今天干的东西吧,在网上找了一下将图片保存到数据库,然后又取出来的例子,都是使用Response.Binarywrite的,好象不是太好使,于是自己也来改一下最终要达到的目的是可以在 Image 的服务器控件中将图片显示出来。
首先当然是要建立一个有Image 类型字段的表。
例如:
id | data | dataname |
这三个字段,其中data为image 类型,dataname就是图片的名称。我的做法是使用临时文件的做法。
1、将图片写入到数据库中。
.....
FileStream fs=new FileStream(imgpath,FileMode.Open,FileAccess.Read,FileShare.Read);
byte[] buffer=new byte[fs.Length];
int fs_state=fs.Read(buffer,0,buffer.Length);
SqlConnection con=new SqlConnection(ConStr);
con.Open();
string insert_sql="insert into datatest values(@data,@dataName)";
SqlParameter _d=new SqlParameter("@data",SqlDbType.Image);
SqlParameter _dName=new SqlParameter("@dataName",SqlDbType.NVarChar,50);
_d.Value=buffer;
_dName.Value=filename;
SqlCommand cmd=new SqlCommand(insert_sql,con);
cmd.CommandType=CommandType.Text;
cmd.Parameters.Add(_d);
cmd.Parameters.Add(_dName);
cmd.ExecuteNonQuery();
cmd.Dispose();
con.Close();
con.Dispose();
2、将数据库里面的图片数据读出来,然后生成一个临时文件作为 Image 服务器控件的 ImageUrl
.....
using(SqlConnection con=new SqlConnection(ConStr))
{
con.Open();
SqlCommand cmd=con.CreateCommand();
cmd.CommandText="GetData";
cmd.CommandType=CommandType.StoredProcedure;
SqlParameter _p=new SqlParameter("@id",SqlDbType.Int);
_p.Value=1;
cmd.Parameters.Add(_p);
SqlDataReader r=cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(r.Read())
{
data=(byte[])r[0];
sFileName=r.GetString(1);
}
MemoryStream ms=new MemoryStream();
ms.Write(data,0,data.Length);
System.Drawing.Image img=System.Drawing.Image.FromStream(ms);
System.Drawing.Bitmap bitmap=new System.Drawing.Bitmap(img,new System.Drawing.Size(100,100));
string _path=Server.MapPath("/");
bitmap.Save(_path+sFileName);
r.Close();
}
return sFileName;
这样就大功告成,测试在Page_Load() 方法中将这个返回的sFileName 做为Image 的ImageUrl 给Image ,就可以了。
呵呵,终于写完,自己也可以做个记录,免得以后生疏了又要再搞一次。以后就可以拿来抄了 呵呵....:)