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。请各位指教。

解决方案 »

  1.   


                                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();
    以前经测试是没有问题的,我想你的问题是@和?的问题
      

  2.   


    按照上面的办法是可以看到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还是不行。
    继续请教,该怎么做?是不是要根据图片的具体类型来写后面的图片格式?
      

  3.   

    仿照上面的代码重新改过程序后,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也是不行。
    继续请教,该如何写呢?是不是需要根据不同的图片类型更改这部分设置?
      

  4.   

    byte[] imageb = new byte[Stream.Length];  
    这一句改成
    byte [] imageb=Stream.ToArray();

    byte[] imageb=Stream.GetBuffer();
    试试看。
      

  5.   

    还有后面Stream.Read这一句先注释掉。