22-04-23, 02:47 PM
(آخر تعديل لهذه المشاركة : 22-04-23, 03:06 PM {2} بواسطة عبدالله الدوسري.)
(21-04-23, 08:02 PM)foo كتب : استاذ عبدالله الدوسري هل لـ SAVE TRANSACTION مفيدة في حالة اتصالين منفصلين؟
دعنا نشبه الـ Transaction بـ أنبوب كبير ،
أي إتصال لم يدخل ضمن الـ Transaction ، ببساطة ليس له علاقة في أي عملية تحدث داخل الـ Transaction
الـ Save Transaction : لن تفيد أي إتصال خارج الـ Transaction
وظيفتها فقط حفظ نقطة عودة ( داخل الـ Transaction )
الـ Transaction : ( سيدخل فيه عدة عمليات مثلاً ، عملية 1، عملية 2، عملية 3، عملية 4، عملية 5، عملية 6، عملية 7، إلخ..... )
بدأت العمليات كلهم في نفس الـ Transaction
العمليات كالتالي :
---------------------------------------------
بداء الدخول في الـ Transaction
---------------------------------------------
بدأت عملية 1
إنتهت بنجاح
---------------------------------------------
بدأت عملية 2
إنتهت بنجاح
---------------------------------------------
( Save Transaction ) حفظ نقطة عودة إلى هذا المكان في حال فشلت العمليات التالية بعد هذة النقطة
نقطة العودة تم تسميتها : ( Save_Point_1 )
---------------------------------------------
بدأت عملية 3
إنتهت بنجاح
---------------------------------------------
بدأت عملية 4
فشلت
---------------------------------------------
ROLLBACK TRANSACTION Save_Point_1 العودة إلى نقطة الحفظ المسماه ( Save_Point_1 )
وكأن العمليات رقم 3 ورقم 4 لم تحدث إطلاقاً
نستطيع تغيير مسار العمليات في هذة الحالة
---------------------------------------------
بدأت عملية 6
إنتهت بنجاح
---------------------------------------------
بدأت عملية 7
إنتهت بنجاح
---------------------------------------------
COMMIT TRANSACTION
الخروج من الـ Transaction بنجاح
في السيناريو السابق
العمليات رقم 3 ورقم 4 لم تحدث
(22-04-23, 08:22 AM)سعود كتب : ما رايكم بالطريقة التالية هل ستسبب مشكلة؟
PHP كود :
using con as new oledbconnection(str)
using cm as new oledbcommand(sql,con)
if con.state = connectionstate.closed then con.open
هنا الاجراءات
if con.state = connectionstate.open then con.close
end using
end using
خصوصا الـFunctions
كل تحقق او اجراء فيه هكذا هل يسبب مشكلة ام انه عادي؟
شكر الله لكم جميعا و كل عام و انتم بخير.
ممتاز جداً إستخدامك للـ Using في مثل هذة الحالات التي لا نحتاج فيها بقاء الكائنات بعد إنتهاء العملية.
لا يوجد مشكلة في الكود، بما أنك أنت من يتحقق من القيمة التي ستعود من هذة الـ Function
وبناءً عليها تقوم باللازم
ملاحظة : ( في هذة الحالة : لا تحتاج أبداً أن تسأل عن حالت الإتصال إذا كان مفتوح أو مغلق، لأنه وبكل تأكيد مغلق ، لأنك للتو أنشائت هذا الكائن وبكل تأكيد حالت الإتصال مغلق )
هذة نسخة أفضل :