منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
الحلقة التاسعة من السلسلة 167 حفظ الصور في تطبيق قواعد بيانات - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : الحلقة التاسعة من السلسلة 167 حفظ الصور في تطبيق قواعد بيانات (/showthread.php?tid=4860)



الحلقة التاسعة من السلسلة 167 حفظ الصور في تطبيق قواعد بيانات - RaggiTech - 02-10-12

كاتب الموضوع : FlyToAbd

السلام عليكم ورحمة الله وبركاته
إن برامج قواعد البيانات لابد ما تحتوي على عناصر تكون من خصائصها الصورة، فإذا أضيفت صور العناصر إلى البرنامج تعتبر من الإمكانيات المكملة له
توجد طريقة بسيطة لحفظ الصور في نظام فيه قواعد بيانات وسريعة التنفيذ وهي ناجحة جدا وهي انك تضع صور الموظفين كملفات JPG في مجلد جنب قاعدة البيانات ويكون اسم الصورة مثلا Emp_234.Jpg للموظف الذي الرقم المعرف له 234 وبالبرنامج لما تستلم الصورة احفظها بالاسم المناسب كما مبين وبذلك المجلد وعند حذف الموظف احذف معه ملف الصورة
وانصح عند جلب الصورة لا تستخدم الفتح الاعتيادي اللي هو


كود :
Dim Img as new Bitmap("filename")
PictureBox1.Image= Img
لأن هذي الطريقة تجعل الملف يبقى غير قابل للتغير حتى ينتهي البرنامج يعني إذا استعرضت موظف معين ورأيت صورته لا تقدر على تغييرها لان الملف لا يمكن حذفه أو تغييره

الطريقة المثلى لجلب صورة من ملف خارجي هي

كود :
Public Function ImageFromFile )ByVal ImagePath As String) As Bitmap
Dim Ret As Bitmap = Nothing
Try
Dim fs As New System.IO.FileStream(ImagePath, IO.FileMode.Open, IO.FileAccess.Read)
Ret = System.Drawing.Image.FromStream(fs(
fs.Close()
Catch ex As Exception
End Try
Return Ret
End Function
ضع هذه الدالة في مكان عام واستدعيها ومرر لها اسم الملف بمساره ترجع لك الصورة من غير ما تحجز عليك

هذا الحل الفوري للمشكلة وأنصح به في في الاحوال التي لا تحتاج الى حماية الصور

الطريقة الثانية اضافة الصور بداخل قواعد البيانات
عيب هذه الطريقة انه لازم تعرف انه الصور لو وضعت بقاعدة البيانات سيكبر الحجم بأضعاف ما هو عليه
وميزتها انه الصور مشفرة غير قابلة للتلاعب

ومن هنا أتوقع انه لا نستخدمها الا بالحالات الخاصة والضرورية والتي لا تحتاج الى تشفير

خلاصة عملية اضافة الصورة الى قاعدة البيانات تتلخص بتحويل الصورة الى مصفوفة بايتات وتحفظ البايتات هذه في قاعدة البيانات في الحقل المطلوب وعند استرجاع الصورة نجلب تلك البايتات ونحولها الى صورة كما في الاكواد التالية

كود :
Private Function ImageToByteArray(ByVal ImageIn As System.Drawing.Image) As Byte()
Dim ms As New IO.MemoryStream()
ImageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
Return ms.ToArray()
End Function
Private Function ByteArrayToImage(ByVal ByteArrayIn As Byte()) As Image
Dim ms As New IO.MemoryStream(ByteArrayIn)
Dim returnImage As Image = Image.FromStream(ms)
Return returnImage
End Function