参考一下:
private void button1_Click(object sender, System.EventArgs e)
{

//存图片
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();

 OleDbCommand mycmd=new OleDbCommand("update info set picture=@a",mycnn );

FileStream mystream=new FileStream("f:\\1.jpg",FileMode.Open,FileAccess.Read);
long len=mystream.Length;

mycmd.Parameters.Add("@a",OleDbType.Binary,(int)len,"picture");
mycmd.Parameters["@a"].Direction=System.Data.ParameterDirection.Input;
           
byte []box=new byte[len];

           
mystream.Read(box,0,(int)len);

mycmd.Parameters["@a"].Value=box; //更新
mycmd.ExecuteNonQuery();
MessageBox.Show("ok");
mystream.Close();
mycnn.Close();
} private void Form1_Load(object sender, System.EventArgs e)
{
this.pictureBox1.Image=System.Drawing.Image.FromFile("f:\\1.jpg");

} private void button2_Click(object sender, System.EventArgs e)
{//读图片
OleDbConnection mycnn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=f:\\dazhu.mdb");
mycnn.Open();
MessageBox.Show("ok.mycnn.open");
OleDbCommand mycmd=new OleDbCommand("select * from info",mycnn );
 OleDbDataReader myrd=mycmd.ExecuteReader();
if(myrd.Read())
{
//读取图片
byte []box=(byte [])myrd["picture"]; //构造流

Stream stream1=new MemoryStream(box);
this.pictureBox2.Image=System.Drawing.Image.FromStream(stream1);
                
//判断文件是否存在
//if(File.Exists("f:\\lingshi.jpg"))
//{//删除
//File.Delete("f:\\lingshi.jpg"); //}
stream1.Close();

}


mycnn.Close();

}

解决方案 »

  1.   

    读:
    Dim arrPicture() As Byte = CType(objDS.Tables(0).Rows(RecordNum).Item("image"), Byte())
    Dim ms As New MemoryStream(arrPicture)
    PictureBox1.Image = Image.FromStream(ms)
    存:
    System.IO.FileStream Fs  = new System.IO.FileStream("d:\\aaa.bmp",System.IO.FileMode.Open);
    System.IO.BinaryReader Br = new System.IO.BinaryReader(Fs);
    byte[] curImage = Br.ReadBytes((int)Fs.Length);
      

  2.   

    TO:
    dazhu2(边城浪子(倚天不出,谁与争锋)) 
    webserv2(GIS)(CAU) 先谢谢你们的热心,但你们好像没有看清我的问题.你们用的方法和仔细看过了,
    和我用的方法没有区别!我的问题是,能不能将picturebox的Image直接转换为byte[]呢?或者将byte[]直接转为Image???
      

  3.   

    private void button2_Click(object sender, System.EventArgs e)//从数据库中读取图片
    {
    System.Data.SqlClient.SqlConnection conn=new SqlConnection("server=.;uid=sa;database=myimage");
    System.Data.SqlClient.SqlCommand command=new SqlCommand("select * from myimage",conn);
    conn.Open();
    System.Data.SqlClient.SqlDataReader dr=command.ExecuteReader();
       if(dr.Read())
       {
        FileInfo fi = new FileInfo("xx.txt");
        FileStream myStream=fi.Open(FileMode.Create);
        byte [] mydata=((byte[])dr["image"]);
        foreach(byte a in mydata)
        {
         myStream.WriteByte(a);
        }
    myStream.Close();
    Image myImage=Image.FromFile("xx.txt");//报错,内存不足
       pic1.Image=myImage;
       pic1.Refresh();
       dr.Close ();
    }
    conn.Close();
    }
    而这样写就可以,不懂不懂,请各位兄台多多指教
    private void button2_Click(object sender, System.EventArgs e)//从数据库中读取图片
    {
    System.Data.SqlClient.SqlConnection conn=new SqlConnection("server=.;uid=sa;database=myimage");
    System.Data.SqlClient.SqlCommand command=new SqlCommand("select * from myimage",conn);
    conn.Open();
    System.Data.SqlClient.SqlDataReader dr=command.ExecuteReader();
       if(dr.Read())
       {
        FileInfo fi = new FileInfo("xx.txt");
        FileStream myStream=fi.Open(FileMode.Create);
        byte [] mydata=((byte[])dr["image"]);
        foreach(byte a in mydata)
        {
         myStream.WriteByte(a);
        }
    myStream.Close();
    string s=null;
    System.IO.StreamReader r=new StreamReader(fi.FullName);
    s+=r.ReadToEnd();
    Image myImage=Image.FromFile(s);
       pic1.Image=myImage;
       pic1.Refresh();
       dr.Close ();
    }
    conn.Close();
    }
      

  4.   

    能不能将picturebox的Image直接转换为byte[]呢?因为不行!因为picturebox.Image对象不能进行序列化!所以应该不能直接转换成BYRE[]
      

  5.   

    Public Shared Function GetXml(ByVal obj As Object) As String
            Dim sw As New StringWriter
            Dim XmlSerializ As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(obj.GetType())
            XmlSerializ.Serialize(sw, obj)
            Return sw.ToString()    End Function序列化回抱错
      

  6.   

    搞了半夜,终于被我勉强实现了功能...把Image转化为byte[]
    我用的方法比较麻烦,希望有高手能帮我精简优化一下就感激不尽:
    public byte[] ConvertImage(Image image)
    {
    FileStream fs=new FileStream("imagetemp",FileMode.Create,FileAccess.Write,FileShare.None);
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(fs,(object)image); 
    fs.Close();
    fs=new FileStream("imagetemp",FileMode.Open,FileAccess.Read,FileShare.None);
    byte[] bytes = new byte[fs.Length];
    fs.Read(bytes,0,(int)fs.Length);
    fs.Close();
    return bytes;
    }
      

  7.   

    楼主  你这样做还是不是你想要的那种啊!
    FileStream fs=new FileStream("imagetemp",FileMode.Create,FileAccess.Write,FileShare.None);
    还是相当于保存了一次临时文件在当然前目录下保存了一个名字为imagetemp的文件 你可以考虑试试内存流!可以的话,我回贴上来
      

  8.   

    根据 webserv2(GIS)(CAU)提示,现精简代码如下
    /// <summary>
    /// 将byte[]转换为Image
    /// </summary>
    /// <param name="bytes">字节数组</param>
    /// <returns>Image</returns>
    public Image ReadImage(byte[] bytes)
    {
    MemoryStream ms=new MemoryStream(bytes,0,bytes.Length);
    BinaryFormatter bf = new BinaryFormatter();
    object obj=bf.Deserialize(ms);
      ms.Close();
      return (Image)obj;
    }
    /// <summary>
    /// 将Image转换为byte[]
    /// </summary>
    /// <param name="image">Image</param>
    /// <returns>byte[]</returns>
    public byte[] ConvertImage(Image image)
    {
    MemoryStream ms=new MemoryStream();
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(ms,(object)image); 
    ms.Close();
    return ms.ToArray();
    }
      

  9.   

    VB版  针对所有OBJECT的! Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim img As Image = PictureBox1.Image
            Dim img2 As Image = CType(GetObject(ReadObject(img)), Image)
            PictureBox2.Image = img2
        End Sub    Public Shared Function ReadObject(ByVal obj As Object) As Byte()
            Dim ms As MemoryStream = New MemoryStream
            Dim bf As BinaryFormatter = New BinaryFormatter
            bf.Serialize(ms, obj)
            ms.Close()
            Return ms.ToArray()
        End Function    Public Shared Function GetObject(ByVal bytes As Byte()) As Object
            Dim ms As MemoryStream = New MemoryStream(bytes, 0, bytes.Length)
            Dim bf As BinaryFormatter = New BinaryFormatter
            Return bf.Deserialize(ms)
        End Function