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

معني ال transaction

مغلق
بدأه C#please في 22 ديسمبر 2005 · 6 رد · 2,655 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ان شاء الله سوف أقوم بشرح معني ال transaction في ال ADO .Net

* ال transaction عبارة عن مجموعة من العمليات التي يتم التعامل معها علي أنها عملية واحدة

فلا يصح نجاح عملية وفشل الأخري... فالكل ناجح أو الكل فاشل

والمثال الشهير جدا علي هذه العملية هو عمليتي السحب والإيداع في حسابات البنوك , فعملية السحب اذا تمت ولم تتم عملية الإيداع تضيع النقود وبالتالي تفشل العملية

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

-تستخدم عملية ال transaction في ال ADO.Net نوعين من ال methods :

1 - commit : لتنفيذ عملية ال transaction .

2 - Rollback : للتراجع عن تنفيذ عملية ال transaction .

وعادة ما يتم استخدام هذه ال methods داخل try & catch كما بالمثال التالي .

المثال يستخدم database اسمها test وال tables : 
1 - table1 : وبه ID,name columns
2 - table2 : وبه ID,salary columns

using System.Data;
using System.Data.SqlClient;


//اعمل connectionبال database//
string connString  = "put ur connection string here";
Sqlconnection connect  = new Sqlconnection(connString);
//عرف ال transaction //
SqlTransaction trans = nconnect.BeginTransaction();

// ابدأ التعامل مع ال database بال insert في ال tables //
Sqldataadapter da1 = new Sqldataadapter("Insert Into table1 (ID,name) Values (@ID,@salary",connect);
// لا تنسي وضع قيم ال parameters هنا //
Dataset ds1 = new Dataset();

Sqldataadapter  da2 = new Sqldataadapter ("Insert Into table2 (ID,salary) Values (@ID,@salary),connect);
// لا تنسي وضع قيم ال parameters هنا //
Dataset ds2 = new Dataset();

// ربط ال  commands بال transaction //
da1.InsertCommand.Transaction = trans;
da2.InsertCommand.Transaction = trans;

try
{
da1.fill(ds1);
da2.Fill(ds2);

// ابدأ بتنفيذ ال transaction //
trans.Commit();
MessageBox.Show("transaction committed , congratulations !! ");
}
catch 
{
trans.Rollbach();
MessageBox.Show("transaction rolled back , sorry !!");
}

• إذا كنت نسيت أي شئ ارجو عدم التأخير في الرد .

• ولا تنسونا من صالح دعاءكم .

#2

:D سؤال لتحريك النقاش

ايهما افضل استخدام ال Transaction من داخل الكود كما فعلت ام ان هناك طريقة اخرى افضل لزيادة الكفاءة ?

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#3

لقد سألت نفسي هذا السؤال قبل ذلك يا طارق و قلت هل الTransaction في ال.net لا يعتمد على الTransaction في الSql Server أي أنه نظام مختلف و لكن الاجابة كانت من ال Sql Profiler الذي وضح ان الTransaction Object يقوم بعمل Transaction على مستوى الDB و ليس مستوى الApplication

و هذه بعض النتائج

22_12_05_09_11_17_1135314677Tran1.JPG

22_12_05_09_12_23_1135314743Tran_.JPG

هناك طبعاً طريقة أخرى و هي كتابة العملية كلها داخل Stored Procedure و عمل الTransaction داخلها

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#4
اقتباس
الTransaction Object يقوم بعمل Transaction على مستوى الDB و ليس مستوى الApplication

لو سئلتنى لاجبتك مباشرة لانه من الطبيعى ان تتم المعالجة على مستوى السيرفر و ليس على مستوى التطبيق

اقتباس
هناك طبعاً طريقة أخرى و هي كتابة العملية كلها داخل Stored Procedure و عمل الTransaction داخلها

:D استاذ

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

كمثال فى حال تصمم قاعدة بيانات مخازن و القيمة الابتدائية للمخزون = 0 و الان لديك Transaction يقوم بعملية اضافة و اخر يقوم بسحب مخزون كيف تعالج هذه المسألة ؟

الاجابة ليست مقتصرة عليك يا محمد فقط

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#5

ما تقصده هنا هو Concurrency Problem و هذه حلها بسيط و يكون باستخدام الExclusive Locks على مستوى الRecord الذي يتم عليه عملية التعديل و هذا أعتقد أنه يحدث تلقائياً في أي نظام قواعد بيانات فبمجرد بداية عملية تغير قيمة معينة على Record غير عمليات القراءة ... فيتم وضع Exclusive Lock على هذا الRecord حتى تنتهي العملية بنجاح ثم تليها عمليات أخرى أما عمليات القراءة فتستخدم نوع اخر اسمه Shared Lock و هو يسمح بعمليات قراءة متزامنة ....

هذا الكلام لا أعرف مدى دعمه في SQL Server و لكن آمل أن يكون مدعوماً بطريقة تلقائية

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6

حسنا ... هناك سؤال

اذا كان عندي class اقوم من خلالها بعمل insert في ال table1

وclass أخري اقوم من خلالها بعمل insert في ال table2

اريد أن اربط بين ال insert commands بـ transaction

#7
اقتباس
هذا الكلام لا أعرف مدى دعمه في SQL Server و لكن آمل أن يكون مدعوماً بطريقة تلقائية

بالنسبة للـ SQL Server فهو يستخدم الطريقة الأولى بطريقة إقتراضية أعتقد لأنه يستخدم Interupt لوضع كل Transaction في Queue، و الـ Transaction القادمة أولاً يتم تنفيذها ثم الثانية و هكذا..

رأس الحكمة الإيمان بالله

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

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