مشاهده دست آورد نظرسنجی: آيا توضيحات و كدها كامل است ؟

رای دهنده
21. شما نمی توانید در این رای گیری رای بدهید
  • بله

    11 52.38%
  • خير

    5 23.81%
  • متوسط

    5 23.81%
نمایش نتایج 1 تا 12 از 12

نام تاپیک: پاياني بر مبحث ذخيره، بازيابي و به روزرساني عكس در پايگاه داده

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    Talking پاياني بر مبحث ذخيره، بازيابي و به روزرساني عكس در پايگاه داده

    سلام
    من يك نمونه برنامه نوشتم كه تقريباً هر كاري كه لازم در ارتباط با عكس و پايگاه داده صورت بگيره توش هست و بعضي جاها تو كد به فارسي توضيح دادم

    برنامه با VS 2008 هست
    اما از فريم فرك دو استفاده كردم تا بقيه هم بتونند نحوه كار ببينند
    پايگاه داده اكسس 2003
    كارايي برنامه
    1. باز كردن عكس دلخواه
    2. تغيير سايز عكس
    3. ذخيره در بانك
    4. بازيابي و نمايش
    5. به روز رساني عكسهاي ذخيره شده با سايز جديد
    6. قابليت حذف
    اميدوارم اين كمكي باشه بر سوالات دوستان در اين مورد

    اما چند مورد:
    در اين مثال بانك Access هست و فرمت فيلد عكس داخل بانك هم از نوع OLE Object هست. براي SQL Server هم از نوع( VARBINERY(MAX مي شه استفاده كرد.

    مايکروسافت قويا هشدار داده است که ديگر از نوع داده IMAGE استفاده نکنيد و به جاي آن از نوع دادة (VARBINERY(MAX استفاده کنيد؛ بايد بدانيد که نوع دادة IMAGE فقط براي سازگاري با SQL Server 2000 هنوز در SQL Server 2005 وجود دارد و در نگارش بعدي SQL Server ، ديگر اين نوع داده پشتيباني نخواهد شد.

    كدهاي ذخيره سازي:
    private void btSave_Click(object sender, EventArgs e)
    {
    try
    {
    MemoryStream ms = new MemoryStream();
    imageBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    byte[] bytes = ms.GetBuffer();
    oleDbCommand1.Parameters.Clear();
    oleDbCommand1.Parameters.Add("@Id", OleDbType.BSTR).Value = ++count;
    oleDbCommand1.Parameters.Add("@Pic", OleDbType.Binary).Value = bytes;
    oleDbCommand1.CommandText = "insert into Pic (id, pic) values(@Id, @pic)";
    oleDbCommand1.ExecuteNonQuery();
    tbTotal.Text = count.ToString();
    index = count;
    flag = true;
    MessageBox.Show("Saved successful");
    }
    catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

    كدهاي بازيابي و نمايش:
    private void btShow_Click(object sender, EventArgs e)
    {
    if (tbNumber.Text != string.Empty)
    {
    if (count >= Int32.Parse(tbNumber.Text))
    {
    Show(Int32.Parse(tbNumber.Text));
    }
    else MessageBox.Show("شماره عكس مورد نظر بيشتر از تعداد عكس موجود در فايل اطلاعاتي است، امكان نمايش نيست");
    } else MessageBox.Show("شماره عكس مورد نظر براي نمايش را انتخاب كنيد");
    }
    private void Show(int indexID)
    {
    try
    {
    GC.Collect();//اين متد براي تخليه منابع سيستم فراخواني مي شود
    oleDbCommand1.CommandText = "SELECT pic FROM Pic WHERE id=" + indexID + "";
    OleDbDataReader myReader = oleDbCommand1.ExecuteReader();
    if (myReader.Read())
    {
    MemoryStream ms = new MemoryStream((byte[])(myReader.GetValue(0)));
    imageBox1.Image = Image.FromStream(ms);
    }
    myReader.Close(); index = indexID;
    flag = true; lbInfo.Text = "Original Size: " + imageBox1.Image.Size;
    }
    catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

    همونطور كه مي بينيد از MemoryStream براي اين كار استفاده شده

    در ضمن به عمد از ImageBox خود دات نت استفاده نكردم و يك ImageBox سفارشي استفاده كردم كه قابليت هاي خوبي براي كار با عكس داره كه دوستان مي تونند سورس و توضيحات لازم اين كنترل از اين لينك دريافت كنند.
    (به دليل محدوديت در حجم فايل هاي پيوستي من سه قسمت گذاشتم براي اجراي برنامه بعد از دانلود هر سه فايل بايد براي فقط اجراي نسخه اجرايي پوشه DataBase در مسير برناه قرار بديد و براي استفاده از سورس لازم Dll هاي داخل فايل Demo به پوشه Debug اضافه كنيد همچنين به ToolBox ويژوال استديدو خودتون)

    سوالي اگر بود در خدمتم
    عکس های ضمیمه عکس های ضمیمه
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله احمد سامعی : دوشنبه 09 آذر 1388 در 10:58 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •