ACCESS中的图片显示和插入问题!!!感激不尽!

fengyun14 2004-11-06 12:05:17
我想从我的ACCESS数据库中提取图片以及插入ACCESS数据库的OLE字段。

目前我的数据库中的OLE字段中有图片,现在我想把它提取出来,我参照了CSDN的一些帖子,我写道:
string connStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
Application.StartupPath+"\\db1.mdb;";
OleDbConnection conn=new OleDbConnection(connStr);
conn.Open();
OleDbCommand cmd=new OleDbCommand("select 图片 from 类别 where 类别ID=1",conn);
OleDbDataReader reader=cmd.ExecuteReader();
reader.Read();
MemoryStream buf=new MemoryStream((byte[])reader[0]);
Image image=Image.FromStream(buf);
pictureBox1.Image=image;


可在编译时,系统在:
Image image=Image.FromStream(buf,true);
行,提示我说:

未处理的“System.ArgumentException”类型的异常出现在 system.drawing.dll 中。
其他信息: 使用了无效参数。

请问,我到底该怎样才能正确的显示数据库中原有的图片以及向ACCESS数据库中插入图像?
谢谢!
我已经参照了其他的方法,如:
转:

把图片读到pictureBox,再写入数据库

SqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");
conn.Open();
SqlCommand cmd=new SqlCommand("insert into fuser values ('1a','1b',@i)",conn);
byte[] ib=new Byte[60000];
FileStream fs=new FileStream(@"D:\windows temp\temp\1.jpg",FileMode.Open ,FileAccess.Read );
fs.Read(ib,0,60000);
cmd.Parameters.Add("@i",SqlDbType.Image,(int)fs.Length);
cmd.Parameters["@i"].Value=ib;
cmd.ExecuteNonQuery();
conn.Close();

-------------------------------------------------------
从数据库读图片到picturebox

SqlConnection conn=new SqlConnection(@"data source=chenyuming2004\VSdotNET;uid=sa;pwd=cym;database=lhf");
conn.Open();
SqlCommand cmd=new SqlCommand("select 照片 from fuser where password='1b'",conn);
SqlDataReader reader=cmd.ExecuteReader();
reader.Read();
MemoryStream buf=new MemoryStream((byte[])reader[0]);
Image image=Image.FromStream(buf,true);
pictureBox1.Image=image;


但不行,谢谢
...全文
246 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengyun15 2004-11-09
  • 打赏
  • 举报
回复
在ACCESS数据库中存图片,你必须有:
cmd.Parameters.Add("@i",SqlDbType.Binary,(int)fs.Length);
烤火的鱼 2004-11-06
  • 打赏
  • 举报
回复
一点都不难,首先,存放图像的字段为image类型,参考下面的代码:
注:MyTools.g_PhotoField为数据库表中的图象字段名称
//将图片保存到数据库中
if(this.picPhoto.Image==null)
{
m_DataRow[MyTools.g_PhotoField]=DBNull.Value;
}
else
{
try
{
MemoryStream ms = new MemoryStream ();
picPhoto.Image.Save (ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte [] myData = new Byte [ms.Length ];
ms.Position = 0;
ms.Read (myData,0,Convert.ToInt32 (ms.Length ));
m_DataRow[MyTools.g_PhotoField] = myData;

}
catch(System.Exception ee)
{
MessageBox.Show(ee.Message);
}
}//else

//读取图象
if(this.m_DataRow[MyTools.g_PhotoField]!=DBNull.Value)
{
try
{
Byte[] byteBLOBData = new Byte[0];
byteBLOBData = (Byte[])m_DataRow[MyTools.g_PhotoField];
MemoryStream stmBLOBData = new MemoryStream(byteBLOBData);
this.picPhoto.Image= Image.FromStream(stmBLOBData);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
this.picPhoto.Image= null;
}
然后用dataatapter.update来进行更新,当然,还有另外的更新办法如直接update,update mytablename set imagefield=@imge,其中@image是一个参数,para.Value=@myByte。
nj_sx 2004-11-06
  • 打赏
  • 举报
回复
大多数情况下,我们不会将图片直接插入数据库中.
因为正如你看到的,向数据库插入图片是多么烦锁的一件事,而且它带来的问题是再将图片从数据库中读出,这样一来不太好.浪费服务器的资源.

只要将图的的路径录入数据库中,利用虚拟路径直显示就可以了!而且很快...

如果你一定要在数据库保存图片.

把图像二进制保存在数据库中,,读取时减去格式中前24个字节就可以了

我这倒有个例子...写信过来发给你
viena 2004-11-06
  • 打赏
  • 举报
回复
up
viena 2004-11-06
  • 打赏
  • 举报
回复
帮你顶
fengyun14 2004-11-06
  • 打赏
  • 举报
回复
不可能没人会吧?!!!

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧