السلام عليكم استخدم لغه سي شارب 2008عندي قاعده بيانات مخزن فيها عدد كبير من الصور للمفروشات بحيث اذا اراد المستخدم ان يختار اي نوع من الاثاث مثلا غرف طعام تعرض له القاعده جميع صور غرف الطعام فكيف افعل ذلك في قاعده البيانات الرجاء مساعدتي بهذا الموضوع
كيفيه عرض الصور المخزنه في قاعده البيانات للمستخدم
اولا نصيحة مني لاتقوم بتخزين الصور في قاعدة البيانات مباشرة الافضل تخزين مسار الصورة في قاعدة البيانات وتحفظ الحقل عادي من نوع نص والصور جميعها ضعها في مجلد resourceالتابع للبرنامج حقك واستدعي الصورة عادي
مثلا أفترض انك لديك صورة اسمها image1.png وهذه الصورة موجودة بالفعل في Resources المشروع
(My.Resources.Image1)
وإن شاء الله تمشي معك
السلام عليكم و رحمة الله و بركاته.
اولا" :كود حفظ الصورة:
قبل كل شئ لابد ان يكون لديك جدول في قاعدة البيانات به حقل لحفظ الصور، هذا الحقل لابد ان يكون من النوع image
Bitmap image = new Bitmap(openFileDialog1.OpenFile());
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] pic = ms.ToArray();1-في البداية نفوم بإنشاء كائن من النوع Bitmap، هذا الكائن مسئول عن العمليات التي تجري على الصور مثل تعديل مقاساتها أو جعل الصورة مقلوبة او معرفة pixelds الخاصة بالصورة، سيكون مسار الصورة عن طريق إختيار مسارها من الجهاز بواسطة الأداة OpenFileDialog
2-ثم نقوم بإنشاء كائن من النوع memorystream و هو كائن سينشئ الصورة في الذاكرة و ليس في ملف حقيقي.
3-نمرر باراميترات للوظيفة save و هي مكان حفظ الصورة(الكائن ms) و نوع الصورة jpeg
4-ننشئ المصفوفة pic من النوع byte، حيث سنحول الصورة المخزنة في الذلكرة عن طريق الكائن ms إلى بايتات حتى يمكن حفظها في قاعدة البيانات
5-ثم كود الحفظ في قاعدة البيانات و هو ليس بحاجة للشرح، لاحظ أن البارامتر @logo ستكون قيمته هي المصفوفة pic
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandType = CommandType.StoredProcedure;
com.CommandText = "Tournament_Insert";
com.Parameters.Add("@tour_name", SqlDbType.NVarChar);
com.Parameters.Add("@type_id", SqlDbType.Int);
com.Parameters.Add("@logo", SqlDbType.Image);
com.Parameters[0].Value = txtbox1.Text;
com.Parameters[1].Value = (int)combobox1.SelectedValue;
com.Parameters[2].Value = pic;
con.Open();
com.ExecuteNonQuery();
con.Close();ثانيا": كود استرجاع الصورة من قاعدة البيانات:
SqlCommand cmdSelect = new SqlCommand("select image from images_table where ID=@ID", con);
cmdSelect.Parameters.Add("@ID", SqlDbType.Int,4);
cmdSelect.Parameters["@ID"].Value = (int)combo_tour.SelectedValue;
con.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();
picture_logo .Image = Image.FromFile(strfn);
con.Close();1-في السطر الأول سنقوم بتحويل البيانات الراجعة من قاعدة البيانات إلى صورتها الأصلية على شكل بايتات عن طريق غنشاء المصفوفة barrImg من النوع byte.
2-سننشئ المتغير strfn و هو متغير يعبر عن مسار أحد الملفات النظام الخاصة بالوفت الحالي.
3-ننشئ كائن من النوع FileStream، و هذا الكائن سيقوم بإنشاء ملف في المسار strfn
4-سيقوم الكائن fs بكتابة مصفوفة البايتات barrImg إلى مسار الملف، أي تحويل هذه البايتات إلى صورة حقيقيةز
5- بعد ذلك سيقوم الكائن fs بمسح البايتات من الذاكرة.
أرجو التوفيق لك
تم تعديل هذه المشاركة بواسطة بهاء صلاح الدين فراج في 30 مارس 2010 في 18:08