PDA

View Full Version : سوال: درج اطلاعات در یک تراکنش



Masoome_das
چهارشنبه 10 شهریور 1389, 23:25 عصر
من می خواهم اطلاعات را در چند جدول به صورت همزمان درج کنم برای این کار یک پروسیجر نوشته ام برای اینکه دستورات به طور کامل اجرا شود یا اگر یکی از دستورات اجرا نشد بقیه هم اجرا نشود چطوری عمل کنم من از دستور ترنزاکنش ها استفاده کردم ولی نمی دونم چه موقع بگم رل بک کن چه موقع کامیت با دستور کامیت که اگر بخش هم اجرا نمی شد بقیه اش را اجرا کرد

meysam_pro
پنج شنبه 11 شهریور 1389, 05:34 صبح
در ابتدا با دستور BEGIN TRANSACTION یک تراکنش را شروع نمایید(میتونید اسم هم بدید، اختیاریه) سپس بعد از هر دستور متغیر سیستمی Error@@ رو بررسی کنید اگر مقداری غیر صفر داشت یعنی خطایی رخ داده و میتونید Rollback کنید در غیر اینصورت Commit.
توجه داشته باشید که بعد از هر دستور مقدار این متغیر صفر میشود و شما باید بعد از هر دستور مقدار را بررسی نمایید.

Masoome_das
پنج شنبه 11 شهریور 1389, 11:16 صبح
توجه داشته باشید که بعد از هر دستور مقدار این متغیر صفر میشود و شما باید بعد از هر دستور مقدار را بررسی نمایید.

من نباید Error@@ را بعد اجرا کل دستورات چک کنم چون اگر بعد از هر دستور Commit کنم که با رسیدن به یک مشکل دستورهای پیش از آن پذیرفته شده و به حالت اول برنمی گرده درسته؟

meysam_pro
پنج شنبه 11 شهریور 1389, 18:58 عصر
من نباید Error@@ را بعد اجرا کل دستورات چک کنم چون اگر بعد از هر دستور Commit کنم که با رسیدن به یک مشکل دستورهای پیش از آن پذیرفته شده و به حالت اول برنمی گرده درسته؟

درست میفرمایید، ولی خب بنده صرفا روش کار رو عرض کردم و شما بسته به الگوریتم میتونید استفاده بکنید. به طور مثال یک متغیر در بالای SP تعریف کنید


DECLAR @RESULT INT

سپس بعد از هر دستور مقدار متغیر RESULT@ رو با ERROR@@ جمع کنید و در آخر SP اگر مقدار این متغیر صفر بود COMMIT درغیر این صورت ROLLBACK نمایید.

morteza271
پنج شنبه 11 شهریور 1389, 19:33 عصر
منم دقیقا یه همچین کاری رو میخوام انجام بدم ولی نمیدونم از استور پروسیجر چجوری استفاده کنم(البته من با سی شارپ برنامه نویسی میکنم و هر کار میکنم استور پروسیجر درست کار نمیکنه!!!)...
اگه بخوام این کارو توی سی شارپ انجام بدم باید چیکار کنم؟
میشه یه نمونه کد برام بذارید؟ممنون میشم...:لبخند:

بهزادصادقی
پنج شنبه 11 شهریور 1389, 23:48 عصر
چند تا سوال دارم از شما:

قسمتی از قابلیتهای برنامه شما در سی شارپ است و قستمی از آن در SQL. سوال اول: آیا شما برای انجام کامل این تراکنش نیاز داری که چند بار ار سی شارپ SQL را فراخوانی کنی و یا آیا می توانی کاری کنی که فقط یک بار از سی شارپ به SQL رجوع کنی؟

به عبارت دیگر، زمانی که شما آماده هستی که تراکنش خود در SQL را شروع کنی، آیا در همان لحظه کل داده هایی را که باید در حین آن تراکنش در پایگاه داده های خود ذخیره کنی در دست داری؟ یا اینکه مجبوری اول تراکنش را شروع کنی، یک سری داده ها را بنویسی تو پایگاه داده ها، بعد برگردی تو سی شارپ، یک مقدار پردازش دیگر را انجام دهی تا یک مقدار دیگر از داده های تراکنش را استخراج کنی و بعد دو باره رجوع کنی به SQL تا آن داده ها را در ادامه تراکنش خود توی پایگاه داده ها ذخیره کنی؟

برای روشن شدن سوالم: آیا می توانی کل داده های مورد نیاز تراکنش خود را اول توی سی شارپ آماده کنی و بعد فقط با فراخوانی یک stored procedure آنها را ذخیره کنی و یا اینکه لازم داری در چند قدم مختلف، جند بار از سی شارپ بری تو SQL و بر عکس، تا تمام داده های تراکنشت را تولید و دخیره کنی.

اگر می توانی همه کارهایت را فقط با یک فقره فراخوانی SQL از سی شارپ انجام دهی، آن وقت انجام کاری که می خواهی خیلی ساده است. ولی اگر لازم داری چند بار بین سی شارپ و SQL حرکت کنی تا بتوانی کارت را به انجام برسانی، اون وقت مسئله برای من خیلی پیچیده تر می شه.

morteza271
جمعه 12 شهریور 1389, 00:32 صبح
چند تا سوال دارم از شما:

قسمتی از قابلیتهای برنامه شما در سی شارپ است و قستمی از آن در SQL. سوال اول: آیا شما برای انجام کامل این تراکنش نیاز داری که چند بار ار سی شارپ SQL را فراخوانی کنی و یا آیا می توانی کاری کنی که فقط یک بار از سی شارپ به SQL رجوع کنی؟

به عبارت دیگر، زمانی که شما آماده هستی که تراکنش خود در SQL را شروع کنی، آیا در همان لحظه کل داده هایی را که باید در حین آن تراکنش در پایگاه داده های خود ذخیره کنی در دست داری؟ یا اینکه مجبوری اول تراکنش را شروع کنی، یک سری داده ها را بنویسی تو پایگاه داده ها، بعد برگردی تو سی شارپ، یک مقدار پردازش دیگر را انجام دهی تا یک مقدار دیگر از داده های تراکنش را استخراج کنی و بعد دو باره رجوع کنی به SQL تا آن داده ها را در ادامه تراکنش خود توی پایگاه داده ها ذخیره کنی؟

برای روشن شدن سوالم: آیا می توانی کل داده های مورد نیاز تراکنش خود را اول توی سی شارپ آماده کنی و بعد فقط با فراخوانی یک stored procedure آنها را ذخیره کنی و یا اینکه لازم داری در چند قدم مختلف، جند بار از سی شارپ بری تو SQL و بر عکس، تا تمام داده های تراکنشت را تولید و دخیره کنی.

اگر می توانی همه کارهایت را فقط با یک فقره فراخوانی SQL از سی شارپ انجام دهی، آن وقت انجام کاری که می خواهی خیلی ساده است. ولی اگر لازم داری چند بار بین سی شارپ و SQL حرکت کنی تا بتوانی کارت را به انجام برسانی، اون وقت مسئله برای من خیلی پیچیده تر می شه.

ممنونم...
خوب در بعضی از قسمت های برنامم میتونم همه ی اطلاعات رو جمع کنم و یک بار به sql متصل بشم ولی بعضی جاها نه اینطور نیست!!!
خوب میشه توضیح بدین،هر کدومشو که میتونید(البته اگه کدشو برام بذارید بهتره!)
در ضمن من هر کار میکنم stored procedure توی سی شارپ درست نمیشه(نمیشه ازش استفاده نکنم؟!)
با تشکر

بهزادصادقی
جمعه 12 شهریور 1389, 00:44 صبح
شما نمی توانید توی سی شارپ یک stored procedure تعریف کنید.

یک stored procedure یک تکه کد می باشد که در SQL Server تعریف و در محیط SQL Server نیز اجرا می گردد.

اگر شما دارید با یک database کار می کنید که در آن یک stored procedure تعریف شده است، شما می توانید آن stored procedure را از طریق کد سی شارپ فراخوانی کنید. بعنی توی سی شارپ درخواست کنید که SQL Server آن stored procedure را که در درون آن database خاصش تعریف شده برای شما اجرا کند و نتایجش را برای شما بفرستد.

آیا این مطالب تا حالا برای شما مفهوم واقع می شود و یا احتیاچ به توضیح بیشتری دارید؟ اگر مفهوم واقع می شود، می توانیم بریم به مرحله بعد.