سلام
نوشته شده توسط
MTPROG
البته اگر با فیلدIdFactor با هم مقایسه بشن تکراری نمیشه مثلا ممکن نیست دو تا شماره فاکتور یکسان State یکسان داشته باشن
خوب منظور من همین بود.
منطقی است شرایط برنامه شما طوری باشد که State و IdFactor شما هر کدام جداگانه تکراری باشند ولی دیگر منطقی نیست هر دو با هم و جفت تکرار شوند و حتماً در کنارهم منحصر به فرد خواهند بود و باید برای سرعت و جلوگیری از تداخل یکتا اعلام شوند.
نوشته شده توسط
_H2_
... شماره فاکتور را با جفت State با هم UniqueIndex معرفی کنید
چطور میشه کاری کرد که این دستورات یا همه اجرا بشن یا هیچکدوم ؟
خیلی جالب است، خیلی!!!!
شما حتی لفظ برنامه نویسی اش را هم نمیدانید اما دقیقاً دارید جملاتی را میگویید که برنامه نویسان گذشته دقیقاً همین جملات را تکرار کرده بودند و طراحان بانکهای اطلاعاتی رابطه ای هم با ان دست به گریبان بودند.
ما در برنامه نویسی دقیقاً قانونی با نام "همه یا هیچ" را داریم که از آن با نام تراکنش یاد میشود.
(
شما خودتان یک ذهنیتی دارید برای کسی که لزوم "همه یا هیچ" را درک نمیکند، مثال ساده ای میزنم تا تداخلش را درک کند:
پولی را میخواهید ااز یک حساب به حساب دیگر منتقل کنید.
در ساده ترین شرایط ممکن و با کمترین عملیات دو کار لازم است...
1) کسر پول از حساب مبداً و 2) افزودن پول به حساب مقصد
حالا فرض کنید کار نیمه انجام شود و فقط یکی از دو عمل فوق موفقیت امیز اجرا شود!
چه میشود؟
اگر 1) انجام شود و 2) انجام نشود (کاری به دلیلش نداریم، به هر دلیل!) پول حقیقی که قبلاً وجود داشته و مالکیت داشته در رایانه از بین میرود
اگر 2) انجام شود و 1) انجام نشود، پولی که وجود نداشته و مالکی ندارد و پشتوانه ای ندارد در رایانه خلق میشود و به وجود می آید.
پس اجرای عملیات فوق مستلزم "همه یا هیچ" است.
)
راه حل:
خوشبختانه اکثر بانکهای اطلاعاتی موجود این عملیات ها را خودشان پشتیبانی میکنند.
در T-SQL با دستورات BEGIN TRAN و COMMIT TRAN و ROLLBACK TRAN میتوانید تراکنش ها را ایجاد و مدیریت کنید.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی برای حالت عادی و معمول پیشنهاد میکنم تمام عملیات هایتان را (برای سرعت و شفافیت و قابلیت نگه داری) در بانک یک SP کنید و از دستورات فوق در آن استفاده کنید.
(یا در خود دات نت هم میتوانید با کلاس System.Data.SqlClient.SqlTransaction مشبه عمل فوق را انجام دهید.)