请问我如何使用C#将数据库中的Image属性列存取的图像放到PictureBox中,前提是使用SqlDataReader,下面是我写的部分代码,请各位专家指教:谢谢private void button3_Click(object sender, System.EventArgs e)
{
  if(this.sqlCommand_Select.Connection.State==ConnectionState.Closed)
  {            
    this.sqlCommand_Select.Connection.Open();
  }        
  this.myReader=this.sqlCommand_Select.ExecuteReader();
  myReader.Read();//假设只有一行,就不用while循环了
  this.ShowDBImage();
}
//ShowDBImage方法如下:
private void ShowDBImage()
{
  try
  {
     byte[] bytes=(byte[])this.myReader.GetValue(0);
     MemoryStream memStream=new MemoryStream(bytes);
     Bitmap MyImage = new Bitmap(memStream);
     this.pictureBox1.Image= MyImage;
  }
  catch(Exception ex)
  {
    MessageBox.Show(ex.Message);
    this.pictureBox1.Image=null;
  }
}
问题关键是,byte[] bytes=(byte[])this.myReader.GetValue(0);这句,这列的数据类型是image,但SqlDataReader没有GetImage()方法,我就使用了GetValue(0);但显然GetValue()方法不能正确将图片提取出来。
谢谢大家帮我解决这个问题,我已经郁闷了很多星期了。

解决方案 »

  1.   

    没看出什么问题,当然不可能直接读出image...一般的做法就是将图片转成二进制流存到数据库中,然后取出来的时候再先读出二进制数据,然后再转成图片...byte[] bytes=(byte[])this.myReader.GetValue(0);你这样做没什么问题...你是怎么将图片存进去的,可能是你存的不对,所以读出来也就出现错误了..
      

  2.   

    我是使用触发器将二进制数组写进去的,代码:SqlParameter myParm=this.sqlCommand1.Parameters.Add("@p1",SqlDbType.Image,16);
    myParm.Value=(object)this.bytes;
    this.sqlCommand1.ExecuteNonQuery();
    数据库中的触发器是这样写的
    CREATE PROCEDURE p
    @p1 image
    AS
    INSERT t VALUES (@p)
    GO
    我是按照SQL SERVER 帮助文档上拷贝的这段触发器。