X
تبلیغات
رایتل

برنامه نویسی در همه زمینه ها

فروش پروژه های برنامه نویسی دانشجوئی

نحوه ذخیره و بازخوانی تصاویر در بانک های اطلاعاتی

در ابتدا به جدولی نیاز داریم که حداقل یک فیلد از نوع Image برای ذخیره تصاویر داشته باشد. بوسیله Script زیر میتوانید این جدول را ایجاد کنید:

 کد:
CREATE TABLE [dbo].[tblImgData] (

        [ID] [int] NOT NULL ,

        [Name] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,

        [Picture] [image] NULL

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


فیلدی که از نوع Image تعریف شده است میتواند تصویر را در داخل خودش که از نوع Binary Data هست نگه داری کند. به همین دلیل ما باید تصویر خود را مجموعه ای از بایت ها تبدیل کنیم تا بتوانیم آن را در داخل بانک ذخیره کنیم.
1. از یک دیالوگ OpenFile برای انتخاب تصویر مورد نظر استقاده میکنیم:

 کد:
this.openFileDialog1.ShowDialog(this);
string strFn=this.openFileDialog1.FileName;



2. با استفاده از کلاس FileInfo اندازه فایل انتخابی را پیدا میکنیم:

 کد:
FileInfo fiImage=new FileInfo(strFn);



3. آرایه بر اساس اندازه فایل که در مرحله قبل بدست آوردیم تعریف میکنیم:

 کد:
this.m_lImageFileLength=fiImage.Length;
m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];



4. با استفاده از کلاس FileStream آرایه ای که در مرحله قبل ایجاد کردیم را پر میکنیم:

 کد:
FileStream fs=new FileStream(strFn,FileMode.Open,
                  FileAccess.Read,FileShare.Read);
int iBytesRead=fs.Read(m_barrImg,0,
               Convert.ToInt32(this.m_lImageFileLength));
fs.Close();



کد کامل که برای Load تصویر استفاه شده است:

 کد:
protected void LoadImage()
{
    try
    {
        this.openFileDialog1.ShowDialog(this);
        string strFn=this.openFileDialog1.FileName;
        this.pictureBox1.Image=Image.FromFile(strFn);
        FileInfo fiImage=new FileInfo(strFn);
        this.m_lImageFileLength=fiImage.Length;
        FileStream fs=new FileStream(strFn,FileMode.Open,
                          FileAccess.Read,FileShare.Read);
        m_barrImg=new byte[Convert.ToInt32(this.m_lImageFileLength)];
        int iBytesRead = fs.Read(m_barrImg,0,
                         Convert.ToInt32(this.m_lImageFileLength));
        fs.Close();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}



5- حالا باید اطلاعاتی که بصورت بایت در داخل آرایه ذخیره کردیم رو به دیتابیس انتقال بدیم. یک Command برای درج رکورد داخل دیتابیس ایجاد میکنیم:

 کد:
this.sqlCommand1.CommandText=
  "INSERT INTO tblImgData(ID,Name,Picture)" +
  " values(@ID,@Name,@Picture)";



6- حال پارامترهای مورد نیاز را برای Command ایجاد میکنیم:

 کد:

this.sqlCommand1.Parameters.Add("@ID",
           System.Data.SqlDbType.Int, 4);
this.sqlCommand1.Parameters.Add("@Name",
           System.Data.SqlDbType.VarChar, 50);

this.sqlCommand1.Parameters.Add("@Picture",
           System.Data.SqlDbType.Image);



* توجه کنید که پارامتر Picture@ از نوع SqlDataType.Image تعریف شده است جهت ارسال تصویر از طریق پارامتر به دستور Insert

7- حال باید پارامترهای تعریف شده در مرحله قبل را مقدار دهی کنیم:

 کد:
this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text;
this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text;

this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;



* توجه کنید که آرایه m_barrImg مجموعه ای از بایت هاست که پس از Load تصویر در مرحله قبل پر شده است.

8- حال Command را جهت انجام عملیات Insert اجرا میکنیم:

 کد:
int iresult=this.sqlCommand1.ExecuteNonQuery();



کد کامل جهت ذخیره تصویر در دیتابیس:

 کد:
private void btnSave_Click(object sender, System.EventArgs e)
{
    try
    {
        this.sqlConnection1.Open();
        if (sqlCommand1.Parameters.Count ==0 )
        {
            this.sqlCommand1.CommandText="INSERT INTO tblImgData(ID," +
                           " Name,Picture) values(@ID,@Name,@Picture)";
            this.sqlCommand1.Parameters.Add("@ID",
                             System.Data.SqlDbType.Int,4);
            this.sqlCommand1.Parameters.Add("@Name",
                             System.Data.SqlDbType.VarChar,50);
            this.sqlCommand1.Parameters.Add("@Picture",
                             System.Data.SqlDbType.Image);
        }

        this.sqlCommand1.Parameters["@ID"].Value=this.editID.Text;
        this.sqlCommand1.Parameters["@Name"].Value=this.editName.Text;
        this.sqlCommand1.Parameters["@Picture"].Value=this.m_barrImg;

        int iresult=this.sqlCommand1.ExecuteNonQuery();
        MessageBox.Show(Convert.ToString(iresult));
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        this.sqlConnection1.Close();
    }
}



نحوه خواندن تصویر از دیتابیسعملیات خواندن تصویر از دیتابیس دقیقا" عکس عمل ذخیره تصویر در دیتابیس است:
1. ابتدا باید یک Command برای خواندن رکورد تعریف کنیم:

 کد:
SqlCommand cmdSelect = new SqlCommand("select Picture" +
                       " from tblImgData where ID=@ID",
                       this.sqlConnection1);



2. حال پارامترهای مورد نیاز را برای Query مورد نظر اضافه میکنیم:

 کد:
cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);



3. مقدار دهی پارامترهای تعریف شده:

[codecs]cmdSelect.Parameters["@ID"].Value=this.editID.Text;
[/code]

4. باز کردن Connection و اجرای متد ExecuteScalar، زیرا ما فقط تصویری که داخل دیتابیس ذخیره شده است را میخواهیم بخوانیم:

 کد:
byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();



*با اجرای متد ExecuteScalar نوعی که برگردانده میشود از نوع Object است که ما آن را به نوع byte تبدیل کردیم.

5. حال داده های خوانده شده را داخل یک فایل موقتی ذخیره میکنیم:

 کد:
string strfn=Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs=new FileStream(strfn,FileMode.CreateNew,FileAccess.Write);
fs.Write(barrImg,0,barrImg.Length);
fs.Flush();
fs.Close();



6. و در آخر کار باید تصویری که خوانده شده را داخل یک PictureBox نمایش دهیم:

 کد:
pictureBox1.Image=Image.FromFile(strfn);



کد کامل مورد نیاز جهت بازخوانی تصویر از داخل دیتابیس:

 کد:
private void btnLoad_Click(object sender, System.EventArgs e)
{
    try
    {
        SqlCommand cmdSelect=new SqlCommand("select Picture" +
              " from tblImgData where ID=@ID",this.sqlConnection1);
        cmdSelect.Parameters.Add("@ID",SqlDbType.Int,4);
        cmdSelect.Parameters["@ID"].Value=this.editID.Text;

        this.sqlConnection1.Open();
        byte[] barrImg=(byte[])cmdSelect.ExecuteScalar();
        string strfn=Convert.ToString(DateTime.Now.ToFileTime());
        FileStream fs=new FileStream(strfn,
                          FileMode.CreateNew, FileAccess.Write);
        fs.Write(barrImg,0,barrImg.Length);
        fs.Flush();
        fs.Close();
        pictureBox1.Image=Image.FromFile(strfn);
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        this.sqlConnection1.Close();
    }
}

 

منبع :  

http://www.p2p.dotnetsource.com

تاریخ ارسال: دوشنبه 6 اردیبهشت‌ماه سال 1389 ساعت 11:06 ق.ظ | نویسنده: دنیای مجازی آریانا | چاپ مطلب
نظرات (1)
یکشنبه 22 فروردین‌ماه سال 1395 06:15 ب.ظ
محمد حامد
امتیاز: 0 0
لینک نظر
سلام
خیلی متشکرم از آموزش عالیتون
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
نام :
پست الکترونیک :
وب/وبلاگ :
ایمیل شما بعد از ثبت نمایش داده نخواهد شد