2

Im trying to insert into my table some image from 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();

I get the following result in database:

ID  Image
6   0x53797374656D2E427974655B5D

However when I insert some image using SQL script:

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

Then inserted data looks like this:

ID  Image
4   0xFFD8FFE000104A464946000102010[.....]

Here binary data is much much longer.

When I retrieve this image from database back into picturebox, it shows up correctly:

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

            byte[] image = (byte[])command.ExecuteScalar();
            MemoryStream ms1 = new MemoryStream(image);
            pictureBox2.Image = Bitmap.FromStream(ms1);  

But I get error when retrieving image with ID = 6 (loaded from pictureBox).

ArgumentException: Parameter is not valid.

What am I doing wrong?

I'd appreciate any advice.

1
  • did u got the solution for this? Commented Jan 20, 2018 at 14:08

2 Answers 2

9

write this way:]

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();
}

or

 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();
Sign up to request clarification or add additional context in comments.

3 Comments

Thank you, but is there a way to store directly from PictureBox? Not from physical path? Or there is a case when I need to store picture from Bitmap.
write this: Image img = PictureBox1.Image();
Thanks for your effort, I found a solution. codeproject.com/Articles/25956/…
0
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using Microsoft.VisualBasic;

namespace inserting_imgs
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    SqlConnection con;
    SqlCommand cmd;
    SqlDataAdapter adapter;
    DataSet ds; int rno = 0;
    MemoryStream ms;
    byte[] photo_aray;

    private void Form1_Load(object sender, EventArgs e)
    {
        con = new SqlConnection("user id=sa;password=123;database=adil");
        loaddata();
        showdata();
    }
    void loaddata()
    {
        adapter = new SqlDataAdapter("select sno,sname,course,fee,photo from student", con);
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
        ds = new DataSet(); adapter.Fill(ds, "student");
    }
    void showdata()
    {
        if (ds.Tables[0].Rows.Count > 0)
        {
            textBox1.Text = ds.Tables[0].Rows[rno][0].ToString();
            textBox2.Text = ds.Tables[0].Rows[rno][1].ToString();
            textBox3.Text = ds.Tables[0].Rows[rno][2].ToString();
            textBox4.Text = ds.Tables[0].Rows[rno][3].ToString();
            pictureBox1.Image = null;
            if (ds.Tables[0].Rows[rno][4] != System.DBNull.Value)
            {
                photo_aray = (byte[])ds.Tables[0].Rows[rno][4];
                MemoryStream ms = new MemoryStream(photo_aray);
                pictureBox1.Image = Image.FromStream(ms);
            }
        }
        else
            MessageBox.Show("No Records");
    }
    private void browse_Click(object sender, EventArgs e)
    {
        openFileDialog1.Filter = "jpeg|*.jpg|bmp|*.bmp|all files|*.*";
        DialogResult res = openFileDialog1.ShowDialog();
        if (res == DialogResult.OK)
        {
            pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
        } 
    }
    private void newbtn_Click(object sender, EventArgs e)
    {
        cmd = new SqlCommand("select max(sno)+10 from student", con);
        con.Open();
        textBox1.Text = cmd.ExecuteScalar().ToString();
        con.Close();
        textBox2.Text = textBox3.Text = textBox4.Text = "";
        pictureBox1.Image = null;
    }
    private void insert_Click(object sender, EventArgs e)
        {
            cmd = new SqlCommand("insert into student(sno,sname,course,fee,photo) values(" + textBox1.Text + ",'" + textBox2.TabIndex + "','" + textBox3.Text + "'," + textBox4.Text + ",@photo)", con);
            conv_photo();
            con.Open();
            int n = cmd.ExecuteNonQuery();
            con.Close();
            if (n > 0)
            {
                MessageBox.Show("record inserted");
                loaddata();
            }
        else
            MessageBox.Show("insertion failed");
    }
    void conv_photo()
    {
        //converting photo to binary data
        if (pictureBox1.Image != null)
        {
            //using FileStream:(will not work while updating, if image is not changed)
            //FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read);
            //byte[] photo_aray = new byte[fs.Length];
            //fs.Read(photo_aray, 0, photo_aray.Length);  

            //using MemoryStream:
            ms = new MemoryStream();
            pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
            byte[] photo_aray = new byte[ms.Length];
            ms.Position = 0;
            ms.Read(photo_aray, 0, photo_aray.Length);
            cmd.Parameters.AddWithValue("@photo", photo_aray);
        }
    }

    private void search_Click(object sender, EventArgs e)
    {
        try
        {
            int n = Convert.ToInt32(Interaction.InputBox("Enter sno:", "Search", "20", 100, 100));
            DataRow drow;
            drow = ds.Tables[0].Rows.Find(n);
            if (drow != null)
            {
                rno = ds.Tables[0].Rows.IndexOf(drow);
                textBox1.Text = drow[0].ToString();
                textBox2.Text = drow[1].ToString();
                textBox3.Text = drow[2].ToString();
                textBox4.Text = drow[3].ToString();
                pictureBox1.Image = null;
                if (drow[4] != System.DBNull.Value)
                {
                    photo_aray = (byte[])drow[4];
                    MemoryStream ms = new MemoryStream(photo_aray);
                    pictureBox1.Image = Image.FromStream(ms);
                }
            }
            else
                MessageBox.Show("Record Not Found");
        }
        catch
        {
            MessageBox.Show("Invalid Input");
        }
    }
    private void update_Click(object sender, EventArgs e)
    {
        cmd = new SqlCommand("update student set sname='" + textBox2.Text + "', course='" + textBox3.Text + "', fee='" + textBox4.Text + "', photo=@photo where sno=" + textBox1.Text, con);
        conv_photo();
        con.Open();
        int n = cmd.ExecuteNonQuery();
        con.Close();
        if (n > 0)
        {
            MessageBox.Show("Record Updated");
            loaddata();
        }
        else
            MessageBox.Show("Updation Failed");
    }

    private void delete_Click(object sender, EventArgs e)
    {
        cmd = new SqlCommand("delete from student where sno=" + textBox1.Text, con);
        con.Open();
        int n = cmd.ExecuteNonQuery();
        con.Close();
        if (n > 0)
        {
            MessageBox.Show("Record Deleted");
            loaddata();
            rno = 0;
            showdata();
        }
        else
            MessageBox.Show("Deletion Failed");
    }
    private void first_Click(object sender, EventArgs e)
    {
        rno = 0; showdata();
        MessageBox.Show("First record"); 
    }

    private void previous_Click(object sender, EventArgs e)
    {

        if (rno > 0)
        {
            rno--; showdata();
        }
        else
            MessageBox.Show("First record");
    }
    private void next_Click(object sender, EventArgs e)
    {
        if (rno < ds.Tables[0].Rows.Count - 1)
        {
            rno++; showdata();
        }
        else
            MessageBox.Show("Last record");
    }
    private void last_Click(object sender, EventArgs e)
    {
        rno = ds.Tables[0].Rows.Count - 1;
        showdata(); MessageBox.Show("Last record");
    }
    private void exit_Click(object sender, EventArgs e)
    {
        this.Close();
    }
 }

}

3 Comments

Please consider including some information about your answer, rather than simply posting code. We try to provide not just 'fixes', but help people learn. You should explain what was wrong in the original code, what you did differently, and why your change(s) worked.
Edit your code : values(' " + textBox1.Text + " ' ,'" you forgot the single quotes for textBox1.text
Code like this invites SQL Injection- NEVER piece a command together from strings and direct user input; ALWAYS use parameters

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.