读书人

从Access数据库读取图片解决方法

发布时间: 2012-01-09 21:05:42 作者: rapoo

从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;
}


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

读书人网 >C#

热点推荐