сохранить изображение Picturebox в базе данных - PullRequest
2 голосов
/ 12 августа 2011

У меня есть коробка с картинками. Изображение в графическом окне является статичным. Я загружаю изображение из папки ресурсов. Я не могу прочитать статическое изображение из коробки с картинками и сохранить его в базе данных. вот мой код.

 private void btnOk_Click(object sender, EventArgs e)
    {
        Image votingBackgroundImage = pictureBox5.Image;
        Bitmap votingBackgroundBitmap = new Bitmap(votingBackgroundImage);
         Image votingImage = (Image)votingBackgroundBitmap;
            var maxheight = (votingImage.Height * 3) + 2;
            var maxwidth = votingImage.Width * 2;
            if (maxheight == 227 && maxwidth == 720)
            {

                 System.IO.MemoryStream defaultImageStream = new System.IO.MemoryStream();
                 Bitmap NewImage =new Bitmap(votingImage,new Size(720,227));
                 Image b = (Image)NewImage;
                  b.Save(defaultImageStream, System.Drawing.Imaging.ImageFormat.Bmp);
                 defaultImageData = new byte[defaultImageStream.Length];
              }
    }

Запрос, который я использовал для добавления изображения в базу данных:

            String MyString1=string.format("insert into question_table(background_image) Values(@background_image)");
            com = new SqlCommand(MyString1, myConnection);
              com.Parameters.Add("@background_image", SqlDbType.Image).Value = defaultImageData;
                com.ExecuteNonQuery();

Когда я проверяю это в базе данных sql. Он сохраняет значение как 0 x000000 ...

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Вы просто создаете byte[], но фактически никогда не копируете содержимое

попробовать

 System.IO.MemoryStream defaultImageStream = new System.IO.MemoryStream();
 Bitmap NewImage =new Bitmap(votingImage,new Size(720,227));
 Image b = (Image)NewImage;
 b.Save(defaultImageStream, System.Drawing.Imaging.ImageFormat.Bmp);
 defaultImageData = new byte[defaultImageStream.Length];
 //assign byte array the content of image
 defaultImageData = defaultImageStream .ToArray();
0 голосов
/ 12 августа 2011

Вы должны сохранить его как BLOB-объект, т.е. байтовый массив.

0 голосов
/ 12 августа 2011

Похоже, вы выделяете массив байтов для хранения содержимого вашего потока, но вы не копируете сам контент.

Возможно, вам не нужен промежуточный массив.Попробуйте использовать ToArray () метод MemoryStream:

b.Save(defaultImageStream, System.Drawing.Imaging.ImageFormat.Bmp);
// ...
com.Parameters.Add("@background_image", SqlDbType.Image).Value
    = defaultImageStream.ToArray();
...