1- ایجاد دیتابیس و جدول
اولین کاری که باید بکنیم اینه که یه دیتابیس به اسم pictures ایجاد میکنیم و داخل قسمت table یه جدول ایجاد میکنیم. برای ایجاد جدول نیاز به 2 ستون داریم. یه آیدی از نوع int و یکی ستون هم برای خود عکس از نوع varbinary(MAX) .ستون ID رو خاصیت is identity رو yes میکنیم که باهر بار ذخیره عکس یکی بهش اضافه بشه. بعد جدول رو با اسم myPic ذخیره میکنیم . دیگه کاری با دیتابیس نداریم.

2- ایجاد دیتاست و متصل کردن آن به دیتابیس
کار بعدی که باید انجام بدیم اینه که یک دیتاست تو برنامه ایجاد کنیم و وصلش کنیم به دیتابیس. در نهایت جدول رو می کشیم و داخل پنجره دیتاست رها میکنیم.

کسانی که با این روش آشنایی ندارن بهتره فیلم رو ببینن که بهتر متوجه بشن.

3- طراحی فرم
برای فرم به 2 تا pictureBox نیاز داریم یکی برای نمایش قبل از ذخیره یکی هم برای نمایش بعد از لود کردن. 3 تا button نیاز داریم یکی برای انتخاب عکس و نمایشش تو pictureBox و یکی برای ذخیره عکس و بعدی برای بازیابی عکس از دیتابیس و یک openFileDialog برای انتخاب عکس

4- کد دکمه انتخاب عکس
کد:
openFileDialog1.Filter = "jpg Files |*.jpg|PNG FIles |*.png";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
pictureBox1.Image = new Bitmap(openFileDialog1.FileName);
ابتدا openFileDialog رو فیلتر کردیم که فایل فقط با فرمت عکس قبول کنه و خط بعد شرط گذاشتیم که اگر کاربر عکسی رو انتخاب کرد در pictureBox نمایشش بده.

5- کد دکمه ذخیره
کد:
Bitmap bmp = (Bitmap)pictureBox1.Image;
MemoryStream ms = new MemoryStream();
bmp.Save(ms, bmp.RawFormat);
myPicTableAdapter.Insert(ms.GetBuffer());
MessageBox.Show("image saved");
تصویر رو از pictureBox دریافت کنه و در یک متغیر از نوع Bitmap با نام Bmp ذخیره کنه. خط بعد یک متغیر از نوع memoryStream با نام ms ایجاد کردیم . خط بعدی عکسی که داخل bmp هست رو در ms ذخیره کردیم. سپس در دیتابیس ذخیره کردیم و در نهایت پیغام چاپ کردیم که ذخیره تصاویر با موفقیت ذخیره شد.

6- کد دکمه بازیابی عکس
کد:
myPicTableAdapter.Fill(dataSet1.myPic);
Image img;
byte[] imageByte =(byte[]) dataSet1.myPic.Rows[0]["images"];
MemoryStream ms = new MemoryStream(imageByte);
img = Image.FromStream(ms);
pictureBox2.Image = img;
ابتدا جدول تصاویر رو select کردیم. بعد یه متغیر از نوع image با نام img ایجاد کردیم. خط بعد تصویر فراخوانی شده در جدول رو در یک آرایه از نوع بایت ذخیره کردیم. خط بعد یک متغیر از نوع memoryStream ایجاد کردیم که آرایه ای که تصویر به صورت بایت ها درونش قرار داره رو به عنوان پارمتر بهش پاس میدیم. و خط بعد میگیم تصویر رو از stream بگیر و در متغیری از نوع image درست کردیم بریز و در نهایت نمایشش بده.

من توضیحات رو به صورت اجمالی بیان کردم. با دیدن فیلم ذخبره و بازیابی تصویر در سی شارپ میتونید تمام مراحل و توضیحات بیشتر رو مشاهده کنید.