Q 我吧

很久没有写过代码了,今天搞一下,的确又生疏了!真可悲,都是给某人害的,总是以为学历=能力,自以为是。哎算了,还是说说今天干的东西吧,在网上找了一下将图片保存到数据库,然后又取出来的例子,都是使用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 ,就可以了。
呵呵,终于写完,自己也可以做个记录,免得以后生疏了又要再搞一次。以后就可以拿来抄了 呵呵....:)

posted on 2005-02-16 22:04  BlackAngel2bAssassin  阅读(1047)  评论(3编辑  收藏  举报