将PictureBox图像插入Sql Server数据库

Gyu*_*l R 2 c# sql-server picturebox winforms

我试图从我的表中插入一些图像来自picturebox:

  MemoryStream ms = new MemoryStream();
  pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
  byte[] photo = new byte[ms.Length];
  ms.Position = 0;
  ms.Read(photo, 0, photo.Length);

  command.CommandText = "INSERT INTO ImagesTable (Image) VALUES('" + photo + "')";
  command.CommandType = CommandType.Text;
  command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

我在数据库中得到以下结果:

ID  Image
6   0x53797374656D2E427974655B5D
Run Code Online (Sandbox Code Playgroud)

但是,当我插入一些图像使用SQL script:

insert into ImagesTable (Image) 
SELECT BulkColumn 
FROM Openrowset( Bulk 'C:\pinguins.jpg', Single_Blob) as img
Run Code Online (Sandbox Code Playgroud)

然后插入的数据如下所示:

ID  Image
4   0xFFD8FFE000104A464946000102010[.....]
Run Code Online (Sandbox Code Playgroud)

这里二进制数据要长得多.

当我从数据库中检索此图像时picturebox,它显示正确:

           command.CommandText = "SELECT Image FROM ImagesTable where ID = 4";

            byte[] image = (byte[])command.ExecuteScalar();
            MemoryStream ms1 = new MemoryStream(image);
            pictureBox2.Image = Bitmap.FromStream(ms1);  
Run Code Online (Sandbox Code Playgroud)

但是在使用ID = 6(从中加载pictureBox)检索图像时出现错误.

ArgumentException: Parameter is not valid.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

我很感激任何建议.

pan*_*eel 7

这样写:]

Image img = Image.FromFile(@"C:\Lenna.jpg");
byte[] arr;
using (MemoryStream ms = new MemoryStream())
{
    img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    arr =  ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

要么

 Image img = picturebox1.Image();
    byte[] arr;
 ImageConverter converter = new ImageConverter();
   arr=(byte[])converter.ConvertTo(img, typeof(byte[]));

command.CommandText = "INSERT INTO ImagesTable (Image) VALUES('" + arr + "')";
  command.CommandType = CommandType.Text;
  command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)