الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيفية ادخال الصور في قاعدة البيانات SQl

مغلق
بدأه lana2008 في 1 يونيو 2007 · 4 رد · 4,719 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هلا شو الطريقة المناسبة لادخال صورة للدتات بيز

الطرق الموجودة في المنتدى

بتحكى ان الافضل ننسخ مسارالصورة للداتا بيز

ونجيب الصورة عن طريق الحدث

الكود الي بدور علية كيف نجيب الصور من البيكتشر بوكس ونخزنها في الداتا بيز مباشرة

يعني الصورة موجودة في البيكتشر بوكس نخزنها مباشرة في الداتا بيز

وايش هو data type المناسب لهذة العملية في ms SQl

وشكرا

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 1 يونيو 2007 في 04:25

#2

السلام عليكم

النوع سيكون image

حفظ الصورة في قاعدة البيانات SQL سيكون بهذا الشكل.

#Region " Add Image to DataBase"
	Public Sub AddImage(ByVal AuthorID As Integer)
		Dim OFD As New OpenFileDialog
		Try
			With OFD
				'Your custom Title
				.Title = "صندوق إدراج الصور"

				.RestoreDirectory = True
				'Filtering to show only the Image With jpeg 
				.Filter = "Image Files(*.JPG)|*.JPG"
				'IF the picture Picked Up Then
				If .ShowDialog = Windows.Forms.DialogResult.OK Then
					'Check the Image size before resize it
					Dim FInfo As New FileInfo(.FileName)
					Dim FileSize As Integer = (FInfo.Length \ 1024)
					If FileSize > 50 Then 'if bigger than 50 KB Refuse it
						MsgBox("حجم الصورة الحالي هو " & FileSize & " كيلوبايت " & " قم بتقليل الصورة. الحد الأقصى هو 50 كيلوبايت فقط !")
						Exit Sub
					End If
					' To Insert Image
					Dim st As New FileStream(.FileName, FileMode.Open, FileAccess.Read)
					Dim mbr As BinaryReader = New BinaryReader(st)
					Dim buffer(st.Length) As Byte
					mbr.Read(buffer, 0, CInt(st.Length))
					st.Close()
					CnnMain.Open()
					Dim cmd As New SqlClient.SqlCommand("sp_InsertAuthorImage", CnnMain)
					cmd.CommandType = CommandType.StoredProcedure
					cmd.Parameters.Add("@Picture", SqlDbType.Image).Value = buffer
					cmd.Parameters.Add("@AuthorID", SqlDbType.Int).Value = AuthorID
					cmd.ExecuteNonQuery()
					cmd.Dispose()
					CnnMain.Close()
				Else
					'Cancelled by User
				End If
			End With
		Catch ex As Exception
			MsgBox(ex.Message)

		Finally
			CnnMain.Close()
		End Try
	End Sub

#End Region

وقراءة الصورة من قاعدة البيانات SQL سيكون على هذا النحو.

#Region " Reading Images"

	Private Sub ReadImages()
		Try
			pboxAuthor.Image = Nothing
			Dim strSQL As String = _
			"SELECT AuthorPicture FROM Authors WHERE AuthorID ='" & Me.txtAutorID.Text & "'"

			Dim cmdImage As New SqlCommand(strSQL, CnnMain)

			Dim Imagebyte() As Byte

			CnnMain.Open()

			If Not IsDBNull(cmdImage.ExecuteScalar) Then
				Imagebyte = cmdImage.ExecuteScalar()
				If (Not Imagebyte Is Nothing) Then
					Dim stream As New MemoryStream(Imagebyte, True)
					stream.Write(Imagebyte, 0, Imagebyte.Length)
					pboxAuthor.Image = New Bitmap(stream)
					stream.Close()
					strSQL = Nothing
				End If
			End If
		Catch ex As Exception
			Throw ex
		Finally
			CnnMain.Close()
		End Try
	End Sub

#End Region

كود الـ StoredProcedure

IF EXISTS (SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE' AND
ROUTINE_NAME = 'sp_InsertAuthorImage')
DROP PROCEDURE sp_InsertAuthorImage
GO

CREATE PROCEDURE sp_InsertAuthorImage
@Picture AS IMAGE,
@AuthorID AS INT
AS
BEGIN
SET NOCOUNT ON
UPDATE Authors
SET AuthorPicture = @Picture
WHERE AuthorID = @AuthorID
SET NOCOUNT OFF
END

الافضل من وجهت نظري أن تحفظ الصور في قاعدة البيانات لا في مجلد, خاصة أن قاعدة البيانات SQL لكن لابد أن نتحقق من حجم الصورة

قبل المضي في حفظها.. ثانياً يجب أن يكون جدول الصور جدول مستقل بذاته, لا يقتصر إلا على الصور ولا ينبغي أن تحفظ الصور مع البيانات

كذلك لا ينبغي أن تجلب الصور بأجمعها عند عملية جلب البيانات و إنما نجلب الصورة الموافقة للصف الحالي.

أخيراً وليس أخراً أن تعمل نسخ احتياطي على القاعدة قبل المضي في عملية التحجيم أو الاصلاح, حتى لا تضيع القيم و الصور أدراج الرياح.

الطريقة الثانية

إذا كانت الصور قليلة في الكم و الكيف وكنتي تعملين على 2005 سيكون عرض الصور و حفظها عن طريق هذا الربط فقط.

   Me.picBoxImage.DataBindings.Add(New System.Windows.Forms.Binding("Image", Me.MainBindingSource, "Photo", True))

هذه الطريقة تعفيكِ عن تحويل الصورة الى النوع Byte فقط أربطِ صندوق الصور بالحقل عبر الـ Binding Source Object

للحقل الذي يحتوي تلك الصور.

لابد كذلك أن تجلبي الصور عند تحميل البيانات ,, ثم تقرئين الصور من صندوق الصور كما هو المعتاد .. بهذا الشكل.

 With OFD

			'Your custom Title
			.Title = "صندوق الصور"

			'Last time recent folder had opened.
			.RestoreDirectory = True

			.Filter = "Image Files(*.*) |*.*"

			'IF the picture Picked Up Then
			If .ShowDialog = Windows.Forms.DialogResult.OK Then
				'Load picture into PictureBox
				picBoxImage.Image = Image.FromFile(.FileName)
			End If
		End With

قاعدة البيانات على 2005 و البرنامج كذلك 2005 بالتوفيق إن شاء الله.

WriteAndReadImageFromSQL.rar

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 5 يونيو 2007 في 04:43

1

في المثال يتضح المقال

#3

معلش

بس انا اول مرة يتعامل مع StoredProcedure

بس مو مشككلة ممكن تحكيلي شو عنهم

كمان بعد ما ظبطت كل اشي اسماء الجداول والاتصال بتنفذ كل و الرسائل تجي و OpenFileDialog يجي و ما بطلع اي خطاء بس المشكلة يعطيني في الجدول ان فارغ ما في صورة

في خطاء و لا ايش المشكلة

#4

تم وضع مثال في الاعلى...

تم تعديل هذه المشاركة بواسطة الشهاب الحارق في 5 يونيو 2007 في 04:40

في المثال يتضح المقال

#5
lana2008 كتب:
معلش

بس انا اول مرة يتعامل مع StoredProcedure

بس مو مشككلة ممكن تحكيلي شو عنهم

كمان بعد ما ظبطت كل اشي اسماء الجداول والاتصال بتنفذ كل و الرسائل تجي و OpenFileDialog يجي و ما بطلع اي خطاء بس المشكلة يعطيني في الجدول ان فارغ ما في صورة

في خطاء و لا ايش المشكلة

OpenFileDialog

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

هذا الموضوع مغلق.

مواضيع مشابهة