مشاهده نسخه کامل
: چگونگی استفاده عملی از کلید خارجی در سی شارپ ( به همراه SQL Server)
alishevchenko4
04-06-2014, 20:51
سلام
من دو جدول به شکل زیر دارم سمت چپ جدول sell و سمت راست جدول stuff نام داره .
ستونstuffCode در جدول سمت راست کلید اصلی و ستون stuffCodeSell در جدول چپ کلید خارجی برای stuffCode ازجدول سمت راستی هست
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
همچنین یه DataSet به شکل زیر در سی شارپ ساختم و دو جدول بالا رو تعریف کردم و کلید خارجی رو هم مانند شکل زیر معرفی کردم .
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
حالا می خوام با این دیتا ست یه دیتا گرید مانند شکل زیر رو پر کنم البته از جدول sell ولی می خوام بجای stuffCodeSell معادل نام آن که در جدول stuff در ستون name هست قرار بگیره
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] یعنی به جای عدد 1 نام pofak و به جای 3 saboon مثل جدول stuff . ازتون خواهش می کنم کمکم کنین به خصوص از شما علی اقا با تشکر .
سلام
دو راه داریذ.
اول آنکه در جدول sell یک فیلد جدید بسازید و خصیصه readonly آن را true و خصیصه Expression آن را به Parent(RELATIONNAME).name تنظیم کنید.
RELATIONNAME را میتوانید با کلیک روی خطی که دو جدول را به هم وصل کرده پیدا کنید.
با این کار فیلد جدید ساخته شده بطور خودکار از جدول والد پر میشود و میتوانید در دیتاگرید از این فیلد استفاده کنید.
دوم انکه در دیتاگریدتان بجای text-column عادی از combo-column استفاده کنید و منبع و خصایص وابسته به ان را با جدول stuff تغذیه کنید.
آنگاه خود combobox داخل گرید عدد را برداشته و نام معادل را جایش نمایش میدهد.
این روش اگر بخواهید قابلیت ویرایش هم داشته باشید کارآیی دارد.
چرا یکی از جدولتان کلید ندارد؟؟؟ اگر کارتان در حد پروژه دانشگاهی و نمره گرفتن و از سرخود باز کردن و... نیست باید عرض کنم dataset زیادی قدیمی و کند و تکنولوژی غیر دلچسبی دارد، بهتر است به سمت entity framework بروید.
موفق باشید.
بسم الله الرحمن الرحیم
اول آنکه در جدول sell یک فیلد جدید بسازید و خصیصه readonly آن را true و خصیصه Expression آن را به Parent(RELATIONNAME).name تنظیم کنید.
با سلام
دلیل خاصی داشت که فیلد جدیدی ایجاد کردید و از فیلد stuffCodeSell به عنوان کلید خارجی استفاده نکردید؟
با سپاس:n16:
سلام
دلیل خاصی داشت که فیلد جدیدی ایجاد کردید و از فیلد stuffCodeSell به عنوان کلید خارجی استفاده نکردید؟
خوب این هم نوعی استفاده از کلید خارجی با توجه به امکانات DataSet است.
برای نمایش در گرید یا باید از Combobox درون گرید استفاده کرد و یا فیلدمتنی را عینا در DataSet.Table داشت.
برای پرشدن این فیلد متنی جدید دوراه وجود دارد، یکی همان است که گفته شد و راه دیگر تغییر دستور SQL-SELECT است که Join ای بین دو جدول داشته باشد و این فیلد خاص را از سریق Join ایجاد شده واکشی کند.
اعتراف میکنم که (باتوجه به گشت کمی زمان) یادم نیست چرا این را به عنوان روش سوم ننوشتم.
شاید منظور شما همین روش بوده(؟!) که اگر چنین است این هم روش خوبی است.
ولی در کل همه این روش ها به واسطه وجود همان کلید خارجی ممکن میشود و معنی خواهد داشت.
ممنون.
بسم الله الرحمن الرحیم
و راه دیگر تغییر دستور SQL-SELECT است که Join ای بین دو جدول داشته باشد و این فیلد خاص را از سریق Join ایجاد شده واکشی کند.
اعتراف میکنم که (باتوجه به گشت کمی زمان) یادم نیست چرا این را به عنوان روش سوم ننوشتم.
شاید منظور شما همین روش بوده(؟!) که اگر چنین است این هم روش خوبی است.
ولی در کل همه این روش ها به واسطه وجود همان کلید خارجی ممکن میشود و معنی خواهد داشت.
با سلام
از اینکه وقت میذارید سپاسگزارم
شما کدام مورد رو ترجیح میدید؟ (مثلا اگر بخواهید موجودی انبار را داشته باشید)
از طرفی اگر بخواهیم اون رو در جدول ذخیره کنیم باید در تمام اینسرت های کالا و ورود کالا و خروج کالا تریگری داشته باشیم که موجودی رو آپدیت کنه و همین طور در مورد حذف و ...
اگر هم نخواهیم اون رو ذخیره کنیم باید هر بار اون رو محاسبه کنیم.
با سپاس فراوان:n16:
سلام
من هیچ یک را ترجیح نمیدهم!
به من باشد، اینها بریزید دور و از آخرین نسخه ممکن EntityFramework-CodeFirst استفاده کنید.
بجای WinApp از WpfApp استفاده کنید و بجای ASP.Net Classic هم از ASP.Net MVC استفاده کنید.
(البته نسخه vNext هم که در راه است و اخیراً نمونه آزمایشی VS vNext جهت دانلود موجود است، پس دلیلی بر استفاده از این تکنولوژی های غبارگرفته وجود ندارد)
درخصوص موجودی انبار هم بسته به شرایط مختلف نرم افزاری (تعداد انبار و محاسبات حسابداری لایفو و فایفو و مقدار میانگین برای موجودی ریالی و موجودی تعدادی و... و...) اگر نیاز به تریگرهای دیتابیسی باشد، خوب میتوانید استفاده کنید، مشکل یا محدودیتی وجود ندارد.
موفق باشید.
بسم الله الرحمن الرحیم
درخصوص موجودی انبار هم بسته به شرایط مختلف نرم افزاری (تعداد انبار و محاسبات حسابداری لایفو و فایفو و مقدار میانگین برای موجودی ریالی و موجودی تعدادی و... و...) اگر نیاز به تریگرهای دیتابیسی باشد، خوب میتوانید استفاده کنید، مشکل یا محدودیتی وجود ندارد.
با عرض سلام و قبولی طاعات
منظورم این بود که فیلد موجودی انبار رو در بانک ذخیره کنیم یا هر بار که نیاز شد اون رو محاسبه کنیم؟
با سپاس فراوان:n16:
سلام
ازنظر سرعت و بازدهی، همانطور که اشاره کردید، شاید بد نباشد که مواردی از این دست در دیتابیس نگه داری شوند و توسط تریگر بروز بودن آنها تضمین گردد.
در کل باید بسته به شرایط این موارد را سنجید و تعداد Write در مقابل تعداد Read را در نظر گرفت و تصمیم مناسب را اتخاذ کرد.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.