ذخیره و بازیابی عکس در دیتابیس

یک برنامه ویندوزی ایجاد کرده و دو کنترل pictureBox و سه دکمه و یک TextBox مانند شکل زیر بر روی آن قرار دهید :save-and-retrieve-photos-in-database-csharp-01
مراحل زیر را برای اجاد یک دیتابیس و جدول طی کنید :
save-and-retrieve-photos-in-database-csharp-02
save-and-retrieve-photos-in-database-csharp-03
save-and-retrieve-photos-in-database-csharp-04
save-and-retrieve-photos-in-database-csharp-05
save-and-retrieve-photos-in-database-csharp-06
save-and-retrieve-photos-in-database-csharp-07

برای انتخاب عکس بر روی button1 دو بار کلیک کرده و کدهای زیر را در داخل ان بنویسید :

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
    if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
    {
        textBox1.Text = OpenFileDialog1.SafeFileName;
        pictureBox1.ImageLocation = OpenFileDialog1.FileName;
    } 
}

برای ذخیره عکس بر روی button2 دو بار کلیک کرده و کدهای زیر را در داخل ان بنویسید :

private void button2_Click(object sender, EventArgs e)
{
    SqlConnection SqlConnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\arta\Documents\SaveImage.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    string query = "Insert Into Table1 (Image) Values (@Image)";
    SqlCommand SqlCommand1 = new SqlCommand(query, SqlConnection1);
    SqlCommand1.Parameters.AddWithValue("@Image", ImageToByte(pictureBox1.Image));
    SqlConnection1.Open();
    SqlCommand1.ExecuteNonQuery();
    SqlConnection1.Close();
}

برای بازیابی عکس بر روی button3 دو بار کلیک کرده و کدهای زیر را در داخل ان بنویسید :

private void button3_Click(object sender, EventArgs e)
{
    SqlConnection SqlConnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\arta\Documents\SaveImage.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    MemoryStream stream = new MemoryStream();
    SqlConnection1.Open();
    SqlCommand command = new SqlCommand("select Image from Table1", SqlConnection1);
    byte[] image = (byte[])command.ExecuteScalar();
    stream.Write(image, 0, image.Length);
    SqlConnection1.Close();
    Bitmap bitmap = new Bitmap(stream);
    pictureBox2.Image = bitmap;
}

همچنین کد زیر را در زیر سازنده کلاس فرم بنویسید :

public static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
} 

برنامه را اجرا کرده با دکمه اول یک عکس انتخاب و با دکمه دوم آن را ذخیره و با دکمه سوم آنرا بازیابی نمایید.
10

کل کد

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;

namespace SaveImeage
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public static byte[] ImageToByte(Image img)
        {
            ImageConverter converter = new ImageConverter();
            return (byte[])converter.ConvertTo(img, typeof(byte[]));
        }  

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
            if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = OpenFileDialog1.SafeFileName;
                pictureBox1.ImageLocation = OpenFileDialog1.FileName;
            } 
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SqlConnection SqlConnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\arta\Documents\SaveImage.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            string query = "Insert Into Table1 (Image) Values (@Image)";
            SqlCommand SqlCommand1 = new SqlCommand(query, SqlConnection1);
            SqlCommand1.Parameters.AddWithValue("@Image", ImageToByte(pictureBox1.Image));
            SqlConnection1.Open();
            SqlCommand1.ExecuteNonQuery();
            SqlConnection1.Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            SqlConnection SqlConnection1 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\arta\Documents\SaveImage.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            MemoryStream stream = new MemoryStream();
            SqlConnection1.Open();
            SqlCommand command = new SqlCommand("select Image from Table1", SqlConnection1);
            byte[] image = (byte[])command.ExecuteScalar();
            stream.Write(image, 0, image.Length);
            SqlConnection1.Close();
            Bitmap bitmap = new Bitmap(stream);
            pictureBox2.Image = bitmap;
        }
    }
}