日期:2014-05-18  浏览次数:20793 次

从Access数据库读取图片
将Image转为byte[]存入Access数据库中的Photo字段(表名staff),这部分操作是正常的,代码如下:
MemoryStream stream=new MemoryStream();
byte[] photo=null;
Image img=this.pictureBox1.Image;
img.Save(stream,ImageFormat.Bmp);
photo=stream.ToArray();
stream.Close();
string sql="Insert into staff (ID,Photo) Values ('001','"+photo+"')";
OleDbCommand comm=new OleDbCommand(sql,conn);
comm.ExecuteNonQuery();

执行这段代码,发现photo的Length为3405534 。

但是从数据库中取数据的时候,执行以下代码,发现photo的Length仅为26 。换成其他图片也一样。请大家帮忙看看,问题出在哪里?

string sql="Select photo From staff Where ID='001'";
OleDbCommand comm=new OleDbCommand(sql,conn);
byte[] photo=(byte[])comm.ExecuteScalar();
也试过Fill到dataSet中,再byte[] photo=(byte[])dataSet.Tables[0].Rows[0]["Photo"];也是一样的结果,只有26字节。我怀疑只有Access数据会出现这样的现象,有空的时候再验证验证。。

请大家帮忙分析下这个问题。。


------解决方案--------------------
string sql="Insert into staff (ID,Photo) Values ('001','"+photo+"')"; 
这样能插得进去吗?
换成传参数试试
------解决方案--------------------
string sql="Insert into staff (ID,Photo) Values ('001','"+photo+"')"; 
你用错了!
------解决方案--------------------
C# code
    private void button4_Click(object sender, EventArgs e)  //存图片 
    {
      MemoryStream stream = new MemoryStream();
      byte[] photo = null;
      Image img =  this.pictureBox1.Image;
      img.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp);
      photo = stream.ToArray();
      stream.Close();
      string sql = "Insert into staff (ID,Photo) Values ('001',@img)";
      OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\d.mdb");
      conn.Open();
      OleDbCommand comm = new OleDbCommand(sql, conn);
      comm.Parameters.Add("@img", OleDbType.VarBinary, photo.Length).Value = photo;
      comm.ExecuteNonQuery();

      conn.Close();
    }

    private void button5_Click(object sender, EventArgs e)  //取图片
    {
      string sql = "Select photo From staff Where ID='001'";
      OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\d.mdb");
      conn.Open();
      OleDbCommand comm = new OleDbCommand(sql, conn);
      OleDbDataReader sdr = comm.ExecuteReader();
      sdr.Read();
      MemoryStream ms = new MemoryStream((byte[])sdr[0]);
      Image image = Image.FromStream(ms);
      sdr.Close();
      conn.Close();
      pictureBox1.Image = image;
    }


我刚才试了试,没问题.变量和文件名你自己修改一下吧.