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

حفظ الكائنات من الذاكرة إلى قاعدة البيانات و استعادتها

مغلق
بدأه MSVS في 11 مايو 2007 · 3 رد · 911 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

إشارة إلى موضوعي كيف يمكنني حفظ Object في قاعدة بيانات ؟ .

فقد توصلنا إلى الحل و الحمد لله .

Imports System.IO
Imports System.Data.OleDb
Imports System.Runtime.Serialization.Formatters.Binary

Public Class Form

	Dim Con As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db.mdb"
	Dim MyConnection As New System.Data.OleDb.OleDbConnection(Con)



	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

		'====================
		'   نحذف أي سجلات في الجدول كي تظهر البيانات من دون وضع شروط في الاستعلام
		Dim strDelete As String = "DELETE * FROM MyPP;"
		Dim cmdDelete As New OleDbCommand(strDelete, MyConnection)

		MyConnection.Open()
		cmdDelete.ExecuteNonQuery()

		cmdDelete.Cancel()
		MyConnection.Close()


		'====================
		'   إعلان عن الكائن الخاص بنا و المطلوب تخزينه من الذاكرة إلى قاعدة البيانات مباشرة
		Dim MSVS_object As New MSVS
		MSVS_object.Name = TextBox1.Text
		MSVS_object.Input = TextBox2.Text
		MSVS_object.Output = TextBox3.Text



		'====================
		'   عملية إدخال الكائن في ميموري ستريم
		Dim bf As New BinaryFormatter
		Dim ms As New MemoryStream
		bf.Serialize(ms, MSVS_object)



		'====================
		'   تحويل الميموري ستريم إلى مصفوفة من نوع بايت
		Dim ByteArray() As Byte
		ByteArray = ms.GetBuffer
		'   إغلاق الميموري ستريم
		ms.Close()


		'====================
		'   إنشاء الاستعلام
		Dim str As String = "INSERT INTO MyPP (PP) VALUES (@pic);"
		Dim cmd As New OleDbCommand(str, MyConnection)
		'   إتشاء باراميتر و تحديد نوعه باينري
		Dim pic As OleDbParameter = New OleDbParameter("@pic", OleDbType.Binary)
		'   اسناد قيمة مصفوفة البايت إلى الباراميتر
		pic.Value = ByteArray
		'   إضافة الباراميتر إلى كائن الإستعلام
		cmd.Parameters.Add(pic)
		'   فتح الاتصال
		MyConnection.Open()
		'   تنفيذ الاستعلام
		cmd.ExecuteNonQuery()

		cmd.Cancel()
		MyConnection.Close()

	End Sub

	Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

		Dim str As String = "select * from MyPP;"
		Dim cmd As New OleDbCommand(str, MyConnection)

		MyConnection.Open()
		cmd.ExecuteNonQuery()

		'   إعلان عن متغير نوعه كائن
		Dim ReturnObject As New Object
		'   إسناد القيمة العائدة من الإستعلام إلى كائن
		ReturnObject = cmd.ExecuteScalar

		cmd.Cancel()
		MyConnection.Close()


		'   تحويل الكائن إلى مصفوفة من نوع بايت
		Dim ArryByte() As Byte
		ArryByte = CType(ReturnObject, Byte())


		'   تحويل المصفوفة إلى ميموري ستريم
		Dim mem As New MemoryStream(ArryByte)


		Dim br As New BinaryFormatter
		Dim MSVS_object As New MSVS

		'   إعادة إدخال قيمة الميموري ستريم إلى الكائن
		MSVS_object = br.Deserialize(mem)

		'   إغلاق الميموري ستريم
		mem.Close()


		'   عرض النتائج
		MsgBox("Name : " & MSVS_object.Name & " , Input : " & MSVS_object.Input.ToString & " , OutPut : " & MSVS_object.Output.ToString)


	End Sub
End Class

الكلاس الذي سيشتق منه الكائن هو :

<System.Serializable()> Public Class MSVS
	'   يجب أن تكون الفئة قابلة
	'   Serializable

	Public Name As String
	Public Input As Integer
	Public Output As Integer

End Class

تنبه يجب أن يكون الكلاس قابل للسريله :lol: (مصطلح جديد)

شكراً لمن ساهم في الوصول للحل و أخص الأخ حازم .

أخيراً ، أحس أن المشاركة خاصة بقسم الـ VB.net أكثر من الـ ADO.net لهذا وضعتها هنا .

والسلام عليكم ورحمة الله وبركاته

Serialization.rar

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

#2

الشكر لله أخي عبدالله , وشكرا لوضعك الحل حتي تعم الفائده , واعذرني لأني لم أكتبه لك بسبب ضيق الوقت , بالتوفيق ,,,

تم تعديل هذه المشاركة بواسطة hazzoom في 11 مايو 2007 في 18:48

#3

السلام عليكم ..

--------------

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

رَبِّ لَا تَذَرْنِي فَرْداً وَأَنتَ خَيْرُ الْوَارِثِينَ

#4

ألف شكر أخي حازم

و جزاك الله خيراً يا أخي / فلسطيننا على النصيحة .

وهنا سؤال آخر يطرح نفسه .

ما مدى إمكانية سريلة (تم اعتماد المصطلح :lol: ) الأدوات ؟

لو تمت العملية أعتقد بأنها ستكون ثورة في برامج الويندوز .

أخي سوف تبكي عليك العيون * * * وتـسـأل عـنك دمـوع المـئـين

فإن جف دمعي سيبكي الغمام * * * يـرصـع قـبرك بــالـياسـمـيـن

أخـي مـا يـأسـنـا ولـن نيـأسـا * * * وما طال في القلب لبث الأسى

ومـا حـل أفــئــدة الــمــــؤمـن * * * سـوى أمـل في الـجنـان رسـى

أخي فانتظر ولتعش في غـد * * * سـيـنـبـثـق الأمـل الـسـرمـد

فـإن مـزقـتـنـا سني الــحـيـاة * * * فإنـا مع الـنصـر فـي مـوعــد

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…