ذخیره عکس در دیتابیس با سی شارپ :: V i R u s Ʒ²

V i R u s Ʒ²

هک و امنیت

V i R u s Ʒ²

هک و امنیت

Virus 32

💢 دوستانم بی دفاع و دشمنانم بی جواب نخواهند ماند 💢

-->
آخرین نظرات
  • ۲۲ مرداد ۰۲، ۰۰:۳۴ - Sami
    مرسی
  • ۱۴ مرداد ۰۲، ۱۴:۴۶ - farhad
    salam
سلام من برگشتم اینبار گفتم تبدیل عکس به باینری و ذخیره اون توو دیتابیس رو بگم توو سی شارپ هم خیلی کاربردیه هم پرچمش بالا بمونه.
قصد داریم توو این پروژه عکسمون رو تبدیل با باینری کنیم و توو دیتابیس ذخیره کنیم و دوباره اونو برگردونیم. این کار خیلی کاربرد داره توو پروژه ها. مخصوصا زمان ذخیره و بازیابی عکس مثل برنامه هایی که تووش اطلاعات پرسنلی یا کالا رو وارد میکنن توو سازمان ها و فروشگاه ها و... بزار یجور بگم که مبتدیا هم راحت تر درک کنن. دوستای عزیزم. اگه به پروژه های ثبت اطلاعات مثل دفترچه تلفن نگاه کنید کارش ثبت و ویرایش و حذف اطلاعات مخاطب هاست. ما به کمک این پروژه ای که در ادامه میخوایم بنویسیم میتونیم عکس رو هم ذخیره کنیم داخل دیتابیسمون (پایگاه داده ها). دیگه باید چغندر باشین نفهمیده باشین :/
اول فرم زیر رو بسازین. دیگه بزرگ شدین میتونین اشیاء رو تشخیص بدین. تک تک نام نبرم براتون :/
معلومه دیه پیکچر باکس و باتنه فقط.
حالا بریم دیتابیسمون رو بسازیم:
دیتابیس ساختن رو که باید بلد باشین چون بارها توو پست ها مرور کردیم اگرم نمیدونین اینجا رو یه نگاه بندازین.
تیبلی به نام pic و دو تا کلومن به نام های id و pic میخوایم.
حالا میریم روو مبحث کدنویسی:
اول که میدونین ما میخوایم با فایل کار کنیم پس کتابخونه IO رو تعریف کنین.
using System.IO;
بعد کانکشن اتصال رو تعریف کنین برای دیتابیس:
public OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; data source=|DataDirectory|\data.mdb;");
public OleDbCommand com = new OleDbCommand();


در رویداد باتن save کد زیر رو بنویسید:
try
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = ms.GetBuffer();
con.Close();
string strSql = "INSERT INTO pic (id, pic) VALUES (?,?)";
using (OleDbCommand dbCmd = new OleDbCommand(strSql, con))
{
dbCmd.CommandType = CommandType.Text;
dbCmd.Parameters.AddWithValue("id", 1);
dbCmd.Parameters.AddWithValue("pic", OleDbType.Binary).Value = bytes;
con.Open();
dbCmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Saved successful :)");
}
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }

کدا رو ببینید متوجه میشین چیز خاصی نداره اول که فایل استریم رو تعریف کردیم بعد بایت رو. بعدشم که عکس رو میریزم توو بایت و بعدشم بایت رو میریزیم توو دیتابیس. بعد دیتابیس رو میریزیم توو برنامه کلا یه بریز بریزی برا خودمون راه میندازیم... بعضی کد هارو از قصد گسترده نکردم که حالتون گرفته شه خودتون برین کدشو بنویسین D: مثل اون آیدی که برابرش کردم با یک درحالی که در ادامه فرآیند برنامه دیگه جوابتون میکنه و...

خب این از این به همین سادگی. الان اگه یه عکسی توو پیکچر باکستون باشه و دکمه سیو رو بزنین اون عکس تبدیل میشه با باینتری و میره توو دیتابیس.


حالا ما میخوایم اون عکس رو که رفت توو دیتابیس به نمایش دربیاریم ینی دوباره تبدیلش کنیم به عکس خوشگل و گرافیکی خودمون. برای اینکار که بهش میگیم اعمال برگشت توو رویداد باتن show کد زیر رو بزنین:

try
{
GC.Collect(); //متد تخلیه منابع
con.Open();
OleDbCommand com = new OleDbCommand("SELECT pic FROM Pic WHERE id=@ab", con);
com.Parameters.AddWithValue("@ab", 1);
OleDbDataReader myReader = com.ExecuteReader();
if (myReader.Read())
{
MemoryStream ms = new MemoryStream((byte[])(myReader.GetValue(0)));
pictureBox2.Image = Image.FromStream(ms);
}
con.Close();
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }

کد بالا هم جنبه تحقیقاتی داره برین تووش ببینین چ خبره :) ولی خب درکل اینم چیز سختی نداره و سلکت کردن اطلاعات از دیتابیس که همون عکس ماست به صورت باینری و تبدیل اون به عکس و ریختن اون توو پیکچر باکس...


خب بحث تمومه. وظیفه داشتم جای خالی این پست رو پر کنم. الباقی ماجرا گردن خودتونه که برین کدارو انگولک کنین و خوب درکشون کنین. و کم و کاستی هارو جبران کنین. بازم به خودتون خیلی فشار آوردین و واشر سرسیلندر سوزوندین و با این حال نفهمیدین چی به چیه، اون پایین کامنت کنین تا بعد از مدتی جوابتون رو بدم :(      *شب بخیر*


Virus32.blog.ir

نظر (۶)

  • Virus32
  • یه بنده خدا
  • سلام داداش

    کامنت اول واس ماس

    Virus32 Virus 32 :
    پرچمت بالاست ♥

    سلام عالی بود

    یه مدت بود خیلی فعال بودید پشت سر هم پست میزارشتین چرا خلوت شده :(

     

    Virus32 32 Attacker ‌ :
    سلام دست تقدیر با من چنین کرد. خیلی اوضام بده همین که میام کامنتا رو میخونم شده اوغات فراغتم. ان شاء الله مشکلات زودتر حل شه سرم خلوت تر شه حسابی سر و صدا راه میندازم توو وب D:

    سلام و شب بخیر.

    اون بدبخت عکس رو از کجا وارد کنه؟

    و اینکه دست  به کیبورد میزنی کد بشه!

    خیلی مطلب خوبی بود

    راستی متلب چیه؟

    Virus32 Virus 32 :
    سلام عزیز
    راست میگی این یه قلم یادش رفته
    روی پیکچر باکس دوبار کلیک کنید و
    OpenFileDialog openDialog = new OpenFileDialog();
    openDialog.Filter = "تمام تصاویر (*.*)|*.bmp;*.jpg;*.png;*.gif;*.jpeg;";
    if (openDialog.ShowDialog() == DialogResult.OK && openDialog.FileName != null)
    {
    pictureBox1.Image = Image.FromFile(openDialog.FileName);
    }

    سلام دایی خوبی؟

    داداش من میخوام یه عکسی رو از یه مسیری حذف کنیم

    تو دیتابیس نیست تو پوشه است

    ولی وقتی کد file.delete رو میزنم خطا میده

    because it is being used by another process

    مغزم داره منفجر میشه دایی

    تو رو خدا کمکم کن

    کل اینترنت رو زیرورو کردم

    ==============================

    متد یک

    var old = myPictureBox.Image;
                myPictureBox.Image = Image.FromFile(System.IO.Directory.GetCurrentDirectory() + @"\Images\defaultImage.jpg");
                old.Dispose();
    
                System.IO.File.Delete(txtFileName.Text);

    ===================

    متد دو

    Image im = GetCopyImage(@"D:\Temp\AAAA.jpg");
        myPictureBox.Image = im;
        File.Delete(@"D:\Temp\AAAA.jpg");
        }
    
    private Image GetCopyImage(string path)
        {
        using (Image im = Image.FromFile(path))
            {
            Bitmap bm = new Bitmap(im);
            return bm;
            }
        }

     ووووو

    ده تا متد دیگه

    هیچ کدوم کار نمیکنن و بازم همون خطا و ...

    دیگه داره اشکم درمیاد

    ازت خواهش میکنم یه لطفی کن دستم به دامنت فردا ارائه دارم

    Virus32 Virus 32 :
    سلام عزیزم
    System.GC.Collect();
    System.GC.WaitForPendingFinalizers();
    File.Delete(masir);
    موفق باشی

    واااااااااااااااااااااااااااااااااااااااااااایی

    وااااااااااااااااااااایی دارم دیوونه میشم

    داداش من سرمو کجا بکوبم داداش؟

    حاجی خیلی خیلی خیلی نوکرتم

    داداش من خاک پاتم به قرآن

    به جون عزیزم قسم الان عاشقت شدم دوست دارم پاتو ببوسم

    دهنت سروییییییییییییییییییییییییس

    وااااااااااااااااااایی

    من یک هفته است درگیر این سه خط بودم ؟؟؟؟؟؟

    هرچی از خدا بخوایی بهت بده داداش

    خدایی الان دارم گریه میکنم

    دمت گرم خدا خیرت بده

    عاقبت به خیر شی داداش

    خیلی مخلصم کاش میتونستم جبران کنم

    اصلا انتظار نداشتم

    هم خیلی زود هم کامل و بی نقص

    خدایا شکرت

    Virus32 Virus 32 :
    خیلی ممنون عزیز
    کاری نکردم
    از شانس خوب خودت بود که همون لحظه آنلاین بودم
    خوشحالم که کارت راه افتاده
    همیشه موفق باشی ♥

    سلام و وقت بخیر .

    ممنون

    Virus32 32 Attacker ‌ :
    سلام. خواهش موفق باشی
    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی