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

معلومة/التحكم فى تزامن البيانات

مغلق
بدأه SOLO.NET في 19 نوفمبر 2005 · 12 رد · 3,914 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

مقدمة

بالنظر الى ان فئة البيانات تستخدم منفصلة عن قاعدة البيانات ، لذا يجب الرقابة على تحقق التزامن بين سجلات قاعدة البيانات وبين سجلات فئة البيانات. على سبيل المثال، قد نجد ان السجلات فى قاعدة البيانات قد تغيرت منذ اخر تأهيل لفئة البيانات. فى هذه الحالة يجب كتابة الكود المناسب لتحديد مايجب عمله بالنسبة لسجل قاعدة البيانات او السجل المقابل فى فئة البيانات.

انواع التحكم فى التزامن

هناك ثلاث اساليب شائعة لادارة التزامن فى قاعدة البيانات:

• اسلوب Pessimistic Concurrency Control. بموجب هذا الاسلوب لا يكون الصف متاحا لباقى المستخدمين بعد استخراجه من قاعدة البيانات الى ان يتم تحديثه فيها بواسطة نفس المستخدم.

• اسلوب Optimistic Concurrency Control. لا يكون الصف متاحا لباقى المستخدمين اثناء عملية التحديث فقط. ويتم فحص الصف فى قاعدة البيانات لتقرير ما اذا كان الصف قد تم تعديله. ولايسمح بتحديث الصف الذى تم تعديله بواسطة المستخدمين الاخرين

• اسلوب Last in Wins . بموجب هذا الاسلوب لا يكون الصف متاحا امام باقى المستخدمين اثناء عملية التحديث فقط. كما لا يتم التحقق من تحديث الصف بواسطة المستخدمين الاخرين. ويتم كتابة اخر تحديث بالصف مما يترتب عليه المتابعة على التحديث السابق.

يستخدم كل من ADO.NET و VS.NET اسلوب Optimistic Concurrency بسبب استخدام هياكل البيانات غير المتصله المتمثلة فى فئات البيانات. ولتنفيذ هذا الاسلوب، يمكن استخدام احد مدخلين: مدخل رقم الاصدار(The Version Approach) ومدخل حفظ جميع القيم (The Saving All Values Approach).

مدخل رقم الاصدار لتحقيق التزامن(The Version Approach):

فى هذا المدخل يجب ان يكون بالسجل المطلوب تحديثه عمود يحتوى على رقم الاصدار(Version Number) او بصمة التاريخ والوقت(Date-time Stamp) ولتحقيق التزامن باستخدام بصمة الوقت ، نقوم بالتحديث فقط عند تطابق القيمة التى من هذا النوع فى السجل المطلوب تحديثه والقيمة الموجودة فى فقرة WHERE بعبارةSQL UPDATE كما يتضح من الكود التالى:

UPDATE Table1 SET Column1=@newvalue1, Column2= @newvalue2
WHERE DateTimeStamp=@origDateTimeStamp

ويمكن استخدام رقم الاصدار بدلا من بصمة الوقت، كما يتضح من الكود التالى:

UPDATE Table1 SET Column1=@newvalue1, Column2= @newvalue2
WHERE RowVersion=@origRowVersionValue

مدخل حفظ جميع القيم لتحقيق التزامن(The Saving All Values Approach):

فى هذا المدخل يتم الحصول على نسخ من جميع الحقول عند قراءة السجل. وهو ما يحدث فى كائن DataSet حيث يتم الاحتفاظ بالنسخة الاصلية من البيانات والنسخة المعدلة. وعند القيام بتحديث مصدر البيانات بالتغييرات الحادثة فى فئة البيانات، يتم مقارنة القيم الاصلية فى صف فئة البيانات مع السجل الاصلى فى مصدر البيانات. عند تطابق السجلين، تتم عملية التحديث بنجاح. المثال التالى يوضح نص تحديث جدول العملاء فى قاعدة البيانات باستخدام البيانات المقابلة فى فئة البياانات:

UPDATE Customers SET CustomerID=@currCustomerID, CompanyName=
@currCompanyName, ContactName=@currContactName, ContactTitle=
@currContactTitle, Address=@currAddress,City=@currCity,PostalCode=
@currPostalCode,Phone=@currPhone,Fax=@currFax
WHRER(CustomerID=@origCustomerID) AND (Address=@origAddress OR
@origAdress IS NULL AND Adress IS NULL) AND (City=@origCity OR
@origCity IS NULL AND City IS NULL)
AND (CompanyName=@origCompanyName OR @origCompanyName IS NULL AND CompanyName IS NULL) AND (ContactName=@origContactName OR @origContactName IS NULL AND ContactName IS NULL) AND (ContactTitle=
@origContactTitle OR @origContactTitle IS NULL AND ContactTitle IS NULL)
AND (Fax=@origFax OR @origFax IS NULL AND Fax IS NULL) AND
(Phone=@origPhone OR @origPhone IS NULL AND Phone IS NULL) AND
(PostalCode=@origPostalCode OR @origPostalCode IS NULL AND PostalCode IS NULL);

SELECT CustomerID,CompanyName,ContactTitle,Address,City,PostalCode,Phone,Fax
FROM
Customer
WHERE
(CustomerID=@currCustomerID)

يجب ملاحظة ان الممررات PARAMETERS التسعة لعبارة SET تمثل القيم الحالية التى سوف تكتب فى قاعدة البيانات، بينما تمثل الممررات التسعة فى فقرة WHRER القيم الاصلية النى تستخدم فى تحديد السجل الاصلى. وتستخدم عبارة SELECT المذكورة فى اخر النص لتجديد فئة البيانات بعد الانتهاء من عملية التحديث فى قاعدة البيانات.

التعامل مع اخطاء التزامن

تقدم ADO.NET كائن DBConcurrency Execption للمساعدة فى حل المشاكل الناشئة عن مخالفات التزامنويعيد هذا الكائن صف البيانات الذى تسبب فى حدوث خطأ التزامن، كما يعيد ايضا الرسالة المرتبطة بهذا الخظأ

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#2

مشكور أخي

لكن عندي سؤال

وهو هل هذا الكلام يدخل فيه جميع انواع قواعد البيانات ؟

#3

هذه الاساليب تطبق على قواعد البيانات المتعددة المستخدمين كSQL Serverو Oracle

اما قواعد بيانات مثل اكسس او لا تحتاج

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#4

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

أن Ado.net لجميع قواعد البيانات العلائقية وليس لنوع معين منها و لكن يوجد تخصيص في بعض الأجزاء

أخوك عمرو عيسي

#5

نفسي اشوف اليوم الي يكون تحت اسمك (خبير فيجول بيسك ) ولا مشرف احسن :P

عضيم جدا ومفيد هذا الدرس : ولكني اتمنا منك اخي الكريم SOLO.NET ان تسهب في الشرح وضرب الأمثلة لكل حالة وبارك الله فيك . B)

#6

بارك الله فيك اخى فواز وإن شاء الله ساقوم بالتوسع فى شرح هذه التقنيات

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

فعلا درس مهم .. جزاك الله خير وننتظر المزيد

فلسطين الزاهية بألوان الحب والسلام

ذلك الطعم الزيتوني الذي يتدفق عسلاً من أفواه بساتينها وحدائقها

تشتاق إليها نفوس المتقين وترنوا للسجود فيها جباه المسلمين

#8

مشكور اخى seahmad

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#10

أخي SOLO.NET

شرح جميل ورائع لا ينقصه شئ سوي التطبيقات العملية

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

مع خالص تحياتي

Major

#11

السلام عليكم

بارك الله فيكم واعتذر عن تاخرى فى الطرح وإن شاء الله ساقوم بالايفاء بوعدى قريبا

بالتوفيق

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#12

اخوي SOLO.NET

اقتباس
هذه الاساليب تطبق على قواعد البيانات المتعددة المستخدمين كSQL Serverو Oracle

اما قواعد بيانات مثل اكسس او لا تحتاج

لماذا ؟؟

وماذا اذا كانت قاعدة البينات موجود على جهاز والبرنامج موجود على عدة اجهزة ؟؟ :rolleyes: B)

#13
اقتباس
لماذا ؟؟

وماذا اذا كانت قاعدة البينات موجود على جهاز والبرنامج موجود على عدة اجهزة ؟؟

ما قلته سابقا لا يعنى ان التطبيق محدد على انواع معينة من قواعد البيانات ولكن من هذه الاساليب ما يخص ADO.NET ولا علاقة له بنوع قاعدة البيانات،،،

اقتباس
يستخدم كل من ADO.NET و VS.NET اسلوب Optimistic Concurrency بسبب استخدام هياكل البيانات غير المتصله المتمثلة فى فئات البيانات

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

ايضا مما يعينك على تطبيق هذه التقينات برمجيا هو ما يوفره SQL Server مثل الـSP وهو لا تجده فى اكسس وغيرها من الخدمات التى تسهل عليك والتى اعتقد انها تصبح اكثر تعقيدا مع اكسس،،

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

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

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