c#中,把picturebox中的图片保存到mysql数据库中的bolb字段中,请高人指点。

citybug_nj 2008-04-14 11:39:33
C#,需要把pictureBox中的图片保存到mysql数据库中的blob字段中去,从网上查找了很多资料,也试了很多办法,数据库中内容还是null,代码如下,请各位高手指点指点。
string sqlstr = "Insert into Empolyer(EmployeeID,DepartmentID,LoginName,PassWord,Name,Sex,IsUse,photo) values ('000007','000004','ssss','ssss','ssss','1','1',@image)";
MySqlConnection conn = new Conn().getConn();
MySqlCommand command = new MySqlCommand(sqlstr,conn);
if (img_photo.Image != null)
{
MemoryStream Stream = new MemoryStream();
img_photo.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] imageb = new byte[Stream.Length];
Stream.Read(imageb,0,(int)Stream.Length);
Stream.Close();
command.Parameters.Add(new MySqlParameter("@image", MySqlDbType.Blob));
command.Parameters["@image"].Value = imageb;
}
command.ExecuteNonQuery();

使用网上说的很多办法,就是保存进去不报错,但仍然是null。请各位指教。
...全文
385 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
citybug_nj 2008-04-16
  • 打赏
  • 举报
回复
按照上面各位的提示,已经正确解决,在此谢谢
dancingbit 2008-04-15
  • 打赏
  • 举报
回复
还有后面Stream.Read这一句先注释掉。
dancingbit 2008-04-15
  • 打赏
  • 举报
回复
byte[] imageb = new byte[Stream.Length];
这一句改成
byte [] imageb=Stream.ToArray();

byte[] imageb=Stream.GetBuffer();
试试看。
citybug_nj 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnfixit 的回复:]
C# code
byte[] imageb = File.ReadAllBytes(picpath);
MySqlConnection sqlcon = DBoper.GetMysqlConn(BaseInfo.DBConnString);
MySqlCommand sqlcom = new MySqlCommand(sqlcomstr.Replace("@images","?images"), sqlcon);
sqlcom.Parameters.Add("?images", MySqlDbType.MediumBlob, imageb.Length).…
[/Quote]
仿照上面的代码重新改过程序后,BLOB字段中有内容存入,但是在Navicat中看不到图片,利用Navicat中的导出工具导出成JPG图片也是无法打开,我怀疑问题出在
MemoryStream Stream = new MemoryStream();
img_photo.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] imageb = new byte[Stream.Length];
Stream.Read(imageb,0,(int)Stream.Length);
Stream.Close();
这部分,我把System.Drawing.Imaging.ImageFormat.Bmp换成System.Drawing.Imaging.ImageFormat.Jpeg也是不行。
继续请教,该如何写呢?是不是需要根据不同的图片类型更改这部分设置?
citybug_nj 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnfixit 的回复:]
C# code
byte[] imageb = File.ReadAllBytes(picpath);
MySqlConnection sqlcon = DBoper.GetMysqlConn(BaseInfo.DBConnString);
MySqlCommand sqlcom = new MySqlCommand(sqlcomstr.Replace("@images","?images"), sqlcon);
sqlcom.Parameters.Add("?images", MySqlDbType.MediumBlob, imageb.Length).…
[/Quote]

按照上面的办法是可以看到BLOB列中已经有了内容,但是在navicat中的数据浏览中却看不到,利用navicat导出成JPG格式的图片,打开的时候提示文件不完整。我自己怀疑
MemoryStream Stream = new MemoryStream();
img_photo.Image.Save(Stream, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] imageb = new byte[Stream.Length];
Stream.Read(imageb,0,(int)Stream.Length);
Stream.Close();
这部分中间有错误。我就是把System.Drawing.Imaging.ImageFormat.Bmp换成System.Drawing.Imaging.ImageFormat.Jpeg还是不行。
继续请教,该怎么做?是不是要根据图片的具体类型来写后面的图片格式?
cnfixit 2008-04-15
  • 打赏
  • 举报
回复

byte[] imageb = File.ReadAllBytes(picpath);
MySqlConnection sqlcon = DBoper.GetMysqlConn(BaseInfo.DBConnString);
MySqlCommand sqlcom = new MySqlCommand(sqlcomstr.Replace("@images","?images"), sqlcon);
sqlcom.Parameters.Add("?images", MySqlDbType.MediumBlob, imageb.Length).Value = imageb;
sqlcom.ExecuteNonQuery();
sqlcom.Dispose();
sqlcon.Close();
sqlcon.Dispose();


以前经测试是没有问题的,我想你的问题是@和?的问题
JustLovePro 2008-04-15
  • 打赏
  • 举报
回复
通常都是把图片路径存入数据库中,而吧图片存在某个文件夹中。
----
lz的做法没尝试过,帮顶

110,539

社区成员

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

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

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