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

استخدام Transaction مع Stored Procedures

بدأه sunbol في 12 أكتوبر 2009 · 5 رد · 1,413 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الكرام

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

عندي سوال عن موضوع Transaction مع stored procedures

في السابق عندما كنت استخدم الـTransaction في الكود مباشره دون ان استخدم اي سورد بروسيجر

كنت استخدمها كالتالي

Dim trans As MySqlTransaction
			trans = Con.BeginTransaction
			Dim insertCommand As New MySqlCommand
			Dim updateCommand As New MySqlCommand
			insertCommand.Transaction = trans
			updateCommand.Transaction = trans
			Try
				NoTxt.Text = CStr(nm)
				'________________________________________________________________________
				SQL = "insert into nationality (nat_no,nationality_a,nationality_e,notes) values('" + NoTxt.Text + "','" + NameATxt.Text + "','" + NameETxt.Text + "','" + NoteTxt.Text + "')"
				insertCommand.Connection = Con
				insertCommand.CommandText = SQL
				insertCommand.ExecuteNonQuery()
				'______________________________________________________________________
				SQL = "update COUNTALL set COUNT=COUNT+1 where count_name='nationality'"
				updateCommand.Connection = Con
				updateCommand.CommandText = SQL
				updateCommand.ExecuteNonQuery()

				MessageBox.Show("تم عملية الاضافة   ", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Information)
				trans.Commit()
			Catch ex As MySqlException
				trans.Rollback()
				MessageBox.Show(ex.Message)
			Finally
				Con.Close()
			End Try

يعني في وسط الكود والهدف منها انو لو عمليه لم تنفذ فلا يننفذ اي عمليه بعدها او يتراجع عن تنفيد جميع العمليات ( بمعنى اما الكل او لا)

من فتره وقد بدات استخدم stored procedures

ومن المعروف ان الكود يكتب في السيرفر

ونقوم فقط بتعريف المدخلات والمخرجات في صفحة خاصه تسمى DBOperations جميعها على شكل فنشن

ثم استدعي الفنشن عند الحاجه ومعها البرميتر جاهز

سوالي كيف اقوم باستخدام Transaction مع stored procedures

علما ان طريقتي في استدعاء الكود كالتالي

dim db as new DBOperations

db.sp_Categories_AddIDAndName(p1,p2,p3)
db.sp_fan_Add(p1,p2,p3)
وهكذا يعني مجموعة عمليات اريدها ان تنفذ  جميعها ( وفي حالة وجود اي مشكله يتراجع عن الكل)

كيف يتم ذلك (اتمنى انو يكون في مثال بسيط على ذلك )

36cm7.gif
#2

السلام عليكم

استخدم TransactionScope كمايلي

اولا اعمل

Imports System.Transactions

و تحتاج الى اضافة reference لها

وبعد ذلك

try

  using (  ts as new TransactionScope())
'Your code

ts.complete
end using 

catch....

حيث يقوم هذا الكود تلقائيا بعمل تراجع عن التعديلات عند حدوث خطأ

وممكن طريقة اخرى وهي جمع تنفيذ البروسيجرات في بروسجير جديد واستخدام SQL transaction

#3

شكرا اخي الكريم

ولكن هل من الممكن ان تضع مثال بسيط على اي طريقه منها

36cm7.gif
#4

الاخ الكريم

عند تجربة الطريقة الاولى وهي TransactionScope

اعطاني هذا الخطاء

msdtc on server is unavailable

وايضا

the opertion is not valid for the state of the transaction

وحاولت وجربت استخدام جمع تنفيذ البروسيجرات في بروسجير جديد واستخدام SQL transaction

واسندت لكل بروسيجر(عند تنفيد الفنشن في صفحه الاكواد ) لكل منها transaction

وفي صفحه تنفيده الخطاء قمت بوضع جميع استدعاءات الفنشن داخل transaction جديده

ولكن للاسف اعطاني

Object reference not set to an instance of an object.

كيف يمكن عمل الطريقه الثانيه

36cm7.gif
#5

استخدم ال transaction الي في ال sql يعني داخل كود ال SP

Sami is the name .net is the game

SamiKaraeen@hotmail.com

#6

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

كيف يعني اخي الكريم عن طريق SP

هل يمكن ان تضع مثال

ولنفرض الـ SP هي كالتالي:

	ALTER  PROCEDURE [dbo].[sp_Stok_Add]

	(
		@item		int output,
		@orgn  varchar(5) ,
		@des varchar(60) ,
		@unt  varchar(8) ,
		@qty  decimal(15, 2) ,
		@lsqty  decimal(12, 2) ,
		@cost  decimal(9, 2) ,
		@price decimal(9, 4) ,
		@ret  decimal(5, 0) ,
		@kg  decimal(8, 4)

	)

AS
	IF NOT EXISTS(SELECT * FROM [DT_Stok] WHERE item=@item)

BEGIN
DECLARE @id_stok int


	SELECT @id_stok=ISNULL(MAX(id_stok),0)+1 FROM [DT_Stok]

	IF @id_stok = 0
		BEGIN
			SELECT @id_stok = ISNULL(MAX([id_stok]),0)+1 FROM [DT_Stok]
		END
INSERT INTO [DT_Stok] (
		[id_stok],
		[item],
		[orgn],
		[des],
		[unt],
		[qty],
		[lsqty],
		[cost],
		[price],
		[ret],
		[kg]

	) VALUES ( 
		@id_stok,
		@item,
		@orgn,
		@des,
		@unt,
		@qty,
		@lsqty,
		@cost,
		@price,
		@ret,
		@kg 

) 
end
return

كيف يكون اضافة transaction لها

وكيف اربطه بباقي العمليات الاخري

اقصد انا عند تنفيد حدث البوتم اريد ان ينفذ كم عمليه جميعها على شكل SP

36cm7.gif

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