oracle 中一列存储的是图片~~blob类型~~表:
Student(s_name,s_pic)记录很多~~所以还要考虑效率问题~~就是要读出来图片然后保存在c:\student文件夹下~图片名用字段s_name.jpg求此代码~~或者提点提点~~写出重要的也行~~小弟分数不多,求帮助~~我是用System.Data.OracleClient

解决方案 »

  1.   

    从数据库中读出的是字节流,将字节流转换为图片后保存就可以了//获取职工图像数据
    byte[] empByte = (byte[])dtEmployees.Rows[0]["emp_FilePath"];
    //内存数据流
    MemoryStream imageStream = new MemoryStream(empByte);
    //获取内存数据流的图像
    System.Drawing.Image empImage = System.Drawing.Image.FromStream(imageStream, true);empImage.Save(路径加文件名);
      

  2.   


    MemoryStream  buf=new  MemoryStream((byte[])reader[0]);  //reader是datareader,是你那个存图片的字段
    Image  image=Image.FromStream(buf,true);//这个就是图片了
    //pictureBox1.Image=image;  //你可以把他显示到pictureBox1上看一下上边发的就是核心的代码
      

  3.   

    OracleConnection cn = new OracleConnection(strCn);
     OracleCommand cmd = cn.CreateCommand();
     cmd.CommandText = "select s_pic  
     from Student";
     try
     {
         cn.Open();
         MemoryStream stream = new MemoryStream();
         IDataReader reader = cmd.ExecuteReader();
         if (reader.Read())
        {
            byte[] pic = (byte[])reader[0];
            
            stream.Write(pic, 0, pic.Length);
                   Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment;FileName= demo.JPG");
            Response.BinaryWrite(pic);
            Response.End();
        }
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    finally
    {
        cn.Close();
    }
      

  4.   

    OracleConnection connection = new OracleConnection("连接串");
        connection.Open();
        OracleCommand command = new OracleCommand("select Image from Image where ...", connection);
        OracleDataReader dr = command.ExecuteReader();
        dr.Read();
    MemoryStream  buf=new  MemoryStream((byte[])dr[0]);  //reader是datareader,是你那个存图片的字段
    Image  image=Image.FromStream(buf,true);//这个就是图片了
      

  5.   

    哦,对了!是WINFORM关键是图片名的问题
    看这张表
    Student(s_name,s_pic(blob)) 最后要图片名是s_Name.jpg
    不知道怎么办
      

  6.   

    晕,这个你把s_name和s_pic两个字段全查出来.
    然后对
    dr["s_pic"]做
    MemoryStream  buf=new  MemoryStream((byte[])dr["s_pic"]);把dr["s_name"].ToString()+".jpg"当文件名.这有什么不知道怎么办的?
      

  7.   

    额,不是那个问题~~汗~~
    cmd.CommandText = "select s_pic,s_name from student";
                /*OracleDataAdapter da = new OracleDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(ds);
                DataTable tb = ds.Tables[0];
                conn.Close();
                for (int x = 0; x < tb.Rows.Count; x++)
                {
                    blob = (byte[])tb.Rows[x]["s_pic"];
                    string jpgname = tb.Rows[x]["s_name"].ToString();
                    fs = new FileStream("c:\\"+jpgname+".jpg", FileMode.Create, FileAccess.Write);
                    fs.Write(blob, 0, blob.Length);
                    fs.Close();
                }*/
                OracleDataReader re = cmd.ExecuteReader();
                while (re.Read())
                {
                    blob = new byte[re.GetBytes(0, 0, null, 0, int.MaxValue)];
                    re.GetBytes(0, 0, blob, 0, blob.Length);
                    //re.Close();
                    string jpgname = re["s_name"].ToString();
                    fs = new FileStream("c:\\" + jpgname + ".jpg", FileMode.Create, FileAccess.Write);
                    fs.Write(blob, 0, blob.Length);
                    fs.Close();
                }
                re.Close();
                conn.Close();汗~~这是我写的两种方法~~(注释的是一种)还有你的~~你说那个执行的效率高??