PDA

View Full Version : اشکال در Transaction



dontcare
چهارشنبه 28 آذر 1386, 12:12 عصر
میخوام از Transaction استفاده کنم
ولی:
1. sqlComand داخل یک کلاس به صورت private است و در تیجه واسه transaction هم باید داخل همین کلاس عملیات انجام بشه

2.عملیات به طور کل درست انجام می شه ولی وقتی با trace پیش می رم و وسط کار برنامه رو نگه می دارم تعدادی از Query ها ثبت می شه و RollBack نمی خوره

مرسی :قلب::لبخند:

reza_rad
چهارشنبه 28 آذر 1386, 12:18 عصر
عملیات به طور کل درست انجام می شه ولی وقتی با trace پیش می رم و وسط کار برنامه رو نگه می دارم تعدادی از Query ها ثبت می شه و RollBack نمی خوره
اگه شما از sqlcommand استفاده میکنی که موقع trace کردن همینکه به executenonequery میرسه اجرا میشه. بقیه اش برمی گرده به صحیح بودن transaction شما.
فکر می کنم بهتره از تویquery analyzer چک کنید ببینید آیا transaction شما صحیح کار میکنه یا خیر.

dontcare
چهارشنبه 28 آذر 1386, 13:51 عصر
از پاسختون ممنونم اما نمی فهمم این مشکل فقط مربوط به sqlcommand هست؟ پس با این حساب اگه کسی از sqlcommand استفاده کنه و وسط کار ارتباطش با Server قطع بشه که به مشکل بر میخوریم
البته این رو هم بگم که وقتی RollBack میخوره عملیات انجام نمیشه و در طول اجرای برنامه و تو حالتی که هنوز transaction بر قرارهست اجازه Qureyو.. نمیده ولی اگه یهو ارتباط رو قطع کنم به مشکل بر می خوریم.

reza_rad
چهارشنبه 28 آذر 1386, 14:14 عصر
از پاسختون ممنونم اما نمی فهمم این مشکل فقط مربوط به sqlcommand هست؟ پس با این حساب اگه کسی از sqlcommand استفاده کنه و وسط کار ارتباطش با Server قطع بشه که به مشکل بر میخوریم
ببینید sqlcommand مشکلی نداره. کاری که اینجا برای شما انجام میده اینه که کوئری شما رو اجرا کنه.حالا اگه مثلا در همین لحظه ارتباط با سرور قطع بشه این دیگه کار transaction شما ست که مشکل رو هندل کنه.
در واقع یک transaction اینو میگه که کل اسکریپت داخل transaction یک موجودیت واحد هست یعنی یا کامل انجام میشه و یا اصلا انجام نمیشه. و اگه شما اسکریپتت رو انینطوری نوشته باشی که در صورت برخورد با ارور rollback بشه یعنی هیچ یک از اسکریپت های این transaction شما انجام نشه.

حالامشکل شما کجای کار هست؟ توضیح بیشتر بدید لطفا...

dontcare
چهارشنبه 28 آذر 1386, 14:46 عصر
من چهار Query دارم:
1. قبل از اجرای Queryها یک کلاس دارم که اینsqlcommandدر اون به صورت Private قرارداره و برای اجرای این Query ها از روتینهای همین کلاس استفاده می کنم:
Sqlcomand.Transaction=Trans
2.شروع به اجرا از طریق Trace میکنم 3 تا از این 4 Query رو ردیف به ردیف اجرا می کنم قبل از اینکه چهارمی اجرا بشه برنامه رو نگه میدارم و Run رو قطع می کنم ولی 3 تا Queryدر سیستم ثبت می شه.
3. قبل از شروع این پروسه BeginTransaction رو انجام میدم و Comit و RollBack هم در جای مناسب خودشون هستن.
4. وقتی برنامه در خالت عادی به مشکلی بر میخوره کاملا درست RollBack آنجام میشه ولی...

reza_rad
چهارشنبه 28 آذر 1386, 15:00 عصر
کدت رو بذاراینجا تا معلوم بشه مشکل چیه.
این مثال رو هم نگاه کن. روال کار شما باید یه چیزی شبیه به این باشه:
http://www.sql-server-performance.com/articles/asp_ado/ado_transactions_p1.aspx

dontcare
چهارشنبه 28 آذر 1386, 15:16 عصر
در اولین فرصت