توجد طريقتين :
الطريقة الأولى : (
التحكم يكون من داخل البرنامج ) بواسطة التحقق من مخرجات جمل الإستعلام
المفروض أن تكون جملة الإستعلام ( جملة الحذف من قاعدة البيانات ) تقوم بإرجاع رقم
هذا الرقم هو عدد السجلات المحذوفة ( سواءاً قمت بحذف سجل واحد أو أكثر من سجل )
داخل الكود تستخدم هذا الرقم : إذا كان أكبر من صفر ( 0 ) تنفذ الأمر الثاني : إذا كان أصغر من أو يساوي صفر ( 0 ) إذن لم يحدث شيء على قاعدة البيانات إذن لا تنفذ الأمر الثاني
الطريقة الثانية : (
التحكم يكون من داخل قاعدة البيانات ) بواسطة الـ (
Transaction )
تعريف الـ Transaction :
ترجمتها بالعربي تعني ( معاملة )
المعاملات هي مفهوم أساسي لقواعد البيانات العلائقية.
إذن المعاملات مفهومها الأساسي هو جمع ( عمليات متعددة أو إجراءات متعددة ) تنفذ في قاعدة بيانات , هدفها هو جمع كل هذة الإجراءات معاً لتصبح وحدة عمل واحدة.
هذه الوحدة من العمل ( تحتوي على أجراءات كثيرة مثلاً ) يمكن أن تنجح أو تفشل ككل.
إذا نجحت : يتم الالتزام والتثبيت والإعتماد بجميع التغييرات داخل هذة المعاملة وجعلها دائمة.
إذا فشل ( أي جزء / والقصد أي إجراء ) داخل هذة المعاملة ( وقمت بإستدعاء أمر التراجع عن التغييرات ) فستكون جميع البيانات كما كانت قبل المعاملة. وكأن شيءً لم يكن. بمعنى المعاملة ملغية بالكامل بجميع إجراءاتها.
مثال على الـ Transaction :
تريد تنفيذ عدة إجراءات على قاعدة البيانات , مثلاً : أريد حذف بيانات موظف من كامل قاعدة البيانات
هذا الموظف له سجل رئيسي في جدول , وبيانات الدخول والخروج في جدول مختلف , وأي وثائق أو صور في جدول آخر , والبيانات المالية في جدول آخر , وله بيانات أخرى في جدول الصلاحيات ,
بمعنى آخر له بيانات منتشرة في جداول كثيرة.
الآن عند تنفيذ أمر الحذف على هذا الموظف ( هذا يعتبر إجراء )
وكل عملية تتم على أي جدول يعتبر ( إجراء )
سينتج عن هذا الأمر إجراءات كثيرة , وتريد تنفيذها بشكل منطقي ومتسلسل ,
الأن :
بدون إستخدام الـ Transaction :
الإجراء الذي ينجح سيعتمد , والإجراء الذي يفشل لن يعتمد
سينتج عن هذة الحالة , خرق لمبداء تكامل البيانات ( في حال فشل أحد الإجراءات )
مثلاُ بيانات الموظف الأساسية تم حذفها من جدول الموظفين , ولكن لا تزال هناك بيانات تخص هذا الموظف في جداول أخرى.
مع إستخدام الـ Transaction :
يجب أن تنجح جميع الإجراءات حتى يتم إعتماد كامل التغييرات , لكن بشرط ::::::: بإستدعاء أمر الإعتماد ( ()Transaction.Commit )
أي إجراء يفشل يعني فشل العملية بالكامل ( بجميع إجراءاتها ) , لكن بشرط ::::::: بإستدعاء أمر التراجع ( ()Transaction.Rollback )
1 -
بإمكانك إنشاء الـ
Transaction داخل البرنامج ( بلغة الـ VB.NET )
كود :
Dim transaction As SqlTransaction
transaction = connection.BeginTransaction()
طريقة إستخدام الـ
Transaction ,
يجب على كل command أن يأخذ نفس الـ
connection الذي تم إنشاء ا الـ
Transaction منه
يجب على كل command أن يأخذ نفس الـ
Transaction الذي تم إنشائة
بمعنى
connection واحد
Transaction واحد
وكل أمر (
command ) يجب أن يعتمد هذين المتغيرن
Dim command As SqlCommand
command.
Connection = connection
command.Transaction = transaction
نفذ كل الإجراءات داخل جملة Try
لاحظ الكود والجملتين ( Try / Catch )
كود :
Try
' Try هنا يعتبر داخل الجملة
Catch ex As Exception
' Catch هنا يعتبر داخل الجملة
End Try
بعد الإنتهاء من تنفيذ كل الأوامر
قم بإستدعاء أمر الإعتماد
transaction.Commit()
في نهاية الجملة Try
داخل الجملة Catch
نفذ أمر التراجع
transaction.Rollback()
2 -
أو كتابت الـ
Transaction داخل قاعدة البيانات بإستخدام الإجراءات المخزنة ( بلغة الـ SQL )
كود :
BEGIN TRANSACTION
-- TRANSACTION نحن الأن داخل نطاق الـ
BEGIN TRY
-- Try بداية الجملة
-- تنفيذ الأمر الأول
INSERT INTO [Test].[dbo].[T1] ([Title], [AVG]) VALUES ('Tidd130', 130), ('Tidd230', 230)
-- تنفيذ الأمر الثاني
UPDATE [Test].[dbo].[T1] SET [Title] = N'az2' ,[AVG] = 1
WHERE [dbo].[T1].[Title] = N'az'
-- إستدعاء أمر الإعتماد
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- CATCH داخل الجملة
ROLLBACK TRANSACTION
END CATCH
GO
فيما يخص قواعد البيانات , وإذا كانت لديك إجراءات عدة وتريد تنفيذها , إذن ( الطريقة الثانية الـ
Transaction )