PDA

View Full Version : آیا استفاده از متد fill درsqladpter برای چند بار در برنامه صحیح است



شرلوک هلمز
شنبه 26 بهمن 1387, 00:55 صبح
آیا استفاده از متد fill درsqladpter برای چند بار در برنامه صحیح است
من یک برنامه نوشتم وهربار که دیتابیس تغییر میکند من با استفاده از متد
Fill اطلاعات داخل dataset را به روز میکنم .
چون حجم اطلاعات زیاد نیست مشکلی بوجود نمی آید اما فکر میکنم اگر حجم اطلاعات زیاد باشد این روش درست نیست
حالا اگر از متد update که در sqladpter وجود دارد استفاده کنم چند مشکل بوجود میآید
اول اینکه قاعدتا باید در ابتدای برنامه تمام اطلاعات را داخل dataset با متد fill پر کنیم حالا برای نمایش به کاربر بین جدولها باید عمل join انجام شود این کار در sql آسان است اما در C# حداقل من بلد نیستم
دوم اگر داخل دیتابیس از تریگرها استفاده کرده باشیم تغییراتی که بر اثر آنها بوجود می آید را چطور در dataset اعمال کنیم طبیعتا دیگر نباید دوباره از متد fill استفاده کنیم
البته فکر میکنم برای کلید خارجی مشکلی نباشد و آن را میتوان برروی جدولها ی داخل dataset پیاده سازی کرد
یک راه دیگر هم این است که هر بار اطلاعات کمی را به کاربر نشان بدهیم و از همون متد fill استفاده کنیم .
لطفا اگر کسی در این موارد تجربه دارد کمک کنه !

shervin_agh67
شنبه 26 بهمن 1387, 11:07 صبح
به نظر من غیر از استفاده از متد fill راه دیگری ندارید چون در هر راه دیگری که استفاده کنید نهایتا مجبورید دوباره دیتاست رو به روز کنید که تنها راهش همینه . البته یک راه هم وجود داره اینه که تغییرات رو از بانک بگیریم و به دیتاست اضافه کنید ولی من تاحالا این روش رو انجام ندادم.

شرلوک هلمز
شنبه 26 بهمن 1387, 16:27 عصر
ممنون از پاسخ تان اما اگر مثلا چند هزار رکورد داخل دیتا بیس وجود داشته باشد هر بار برای یک تغییر ساده باید تمام رکورد ها را fill نماییم به نظر نمیاید منطقی باشد

majid325
یک شنبه 27 بهمن 1387, 01:39 صبح
سناريو ي نشون دادن اطلاعات مهم هست؟ بايد بتوني سناريو رو جوري عوض كني كه اطلاعات با فيلتر به دست كاربر برسه و يا در نهايت ديگه چاره اي نداشتي بايد براي اجراي متود زمانبرت اون رو به روش آسنكرون فراخواني كني.

شرلوک هلمز
پنج شنبه 01 اسفند 1387, 22:38 عصر
پس با این وصف متد update در sqladpter چه فایده ای دارد
خواهش می کنم دوستان نظرات شان را در این مورد بگویند
از پاسخها تشکر میکنم

majid325
جمعه 02 اسفند 1387, 05:31 صبح
اول اینکه قاعدتا باید در ابتدای برنامه تمام اطلاعات را داخل dataset با متد fill پر کنیم حالا برای نمایش به کاربر بین جدولها باید عمل join انجام شود این کار در sql آسان است اما در C# حداقل من بلد نیستم
دسته بندی موضوعات تالار سی شارپ (http://barnamenevis.org/forum/showthread.php?t=129103) پست 5 لينك 12 از بالا به پايين


دوم اگر داخل دیتابیس از تریگرها استفاده کرده باشیم تغییراتی که بر اثر آنها بوجود می آید را چطور در dataset اعمال کنیم طبیعتا دیگر نباید دوباره از متد fill استفاده کنیم
البته فکر میکنم برای کلید خارجی مشکلی نباشد و آن را میتوان برروی جدولها ی داخل dataset پیاده سازی کرد
اگر تريگير بر محتواي ركوردها تاثير ميزاره بايد از متد fill استفاده كنيد

یک راه دیگر هم این است که هر بار اطلاعات کمی را به کاربر نشان بدهیم و از همون متد fill استفاده کنیم .
در كل اين روش رو بايد استفاده كنيد كه به سناريو كد نويسي(اين سناريو با سناريو نمايش داده ها فرق داره) هم ربط داره مثل Pageing در گريد.

لطفا اگر کسی در این موارد تجربه دارد کمک کنه !
كلا جواب هاي كه در اين سايت داده ميشه صرفا جواب براي سوال پرسيده شده است . لپ كلام براي كار با ديتا بيس بايد 3 لايه كار كنيد تا همه چيز براتون روشن بشه.

jafari1
جمعه 02 اسفند 1387, 11:22 صبح
كلا جواب هاي كه در اين سايت داده ميشه صرفا جواب براي سوال پرسيده شده است . لپ كلام براي كار با ديتا بيس بايد 3 لايه كار كنيد تا همه چيز براتون روشن بشه.

با سلام و عرض تشكر
اگر زحمت بكشيد يك نمونه ساده از برنامه سه لايه در انجمن بگذاريد متشكر ميشوم چون تا كنون فقط همه جا گفته ميشود برنامه سه لايه ولي اثري از آن نيست ضمنا آيا برنامه هائي كه توسط ويزارد ساخته ميشود و داراي ديتاست است و همه دستورات اسكيو ال داخل آن است را نميشود سه لايه تلقي كرد؟

majid325
شنبه 03 اسفند 1387, 00:11 صبح
در مورد نمونه كه بايد عرض كنم يه نمونه كار قوي و كامل (5 لايه) asp تو سايت هست ، بگرديد پيدا ميكنيد
يكي ، دو تا نمونه كار win هم هست كه ساده تره.......
جواب سوالتون هم منفي هست.

شرلوک هلمز
شنبه 03 اسفند 1387, 19:18 عصر
دوست عزیز majid325 اگر پست را اشتباه نرفته باشم (master/detail ) در آنجا فقط روابط جداول انجام شده است اما منظور من این است که یک الحاق ما بین این جداول انجام شود و نتیجه در دیتا گرید نمایش داده شود مثلا دو ستون از یک جدول و دو ستون از یک جدول دیگر انتخاب شود البته بر مبنای روابطی که شما ذکر کردید

majid325
شنبه 03 اسفند 1387, 23:14 عصر
دوست عزیز majid325 اگر پست را اشتباه نرفته باشم (master/detail ) در آنجا فقط روابط جداول انجام شده است اما منظور من این است که یک الحاق ما بین این جداول انجام شود و نتیجه در دیتا گرید نمایش داده شود مثلا دو ستون از یک جدول و دو ستون از یک جدول دیگر انتخاب شود البته بر مبنای روابطی که شما ذکر کردید

نه شما اشتباه نرفتید , سوال رو خوب نگرفتم(خوب نرسوندی)!
این کاری که شما میخوای انجام بدی یعنی نمایش یه کوئری الحاقی در گرید, زیاد نمای خوبی نداره و از طرفی توی add,Update, ... باید کلی سر و کله بزنی باهاش , توی نمایش یه کوئری الحاقی معمولان رابطه های یک به چند هست , در این صورت کوئری شما در ساذه ترین حالت یک مجموعه رکورد به تعداد یک ضرب دکارتی بین جدوال برمیگردونه حالا فکر کن چه نمایی پیدا میکنه(البته شاید این تو کار شما مهم نباشه) حالا برا اینکه بهتر متوجه بشی فکر کن تو جدول اصلی 3 تا رکورد داری و تو جدول فرعی به ازای هر رکورد در جدول اصلی 3 رکورد داری در این حالت یه کوئری INNER JOIN به شما 9 تا رکورد بر میگردونه .
حالا اگر همین کار رو میخوای انجام بدی که کوئری هر چی میتونه باشه (یه کوئری الحاقی یا ساده) , کوئریتوه پاس به به command و تموم و اگر نه که رو لینکی که گزاشتم یه بار دیگه دقت کن.

شرلوک هلمز
سه شنبه 06 اسفند 1387, 11:58 صبح
شود که باز هم باید از متد fill استفاده کنیم
من سعی میکنم دقیقتر بگم
فرض میکنیم ما دو تا جدول داریم در یک جدول مثلا نام نویسنده همراه کد آن و در جدول دیگر که در واقع جدول اصلی ما است و اطلاعات زیادی در ان وجود دارد فقط کد نویسنده حالا ما میخواهیم نام نویسنده را در دیتا گرید به همراه بقیه اطلاعات نمایش بدهیم
خوب حالا باید یک الحاق میان دو جدول انجام دهیم تا نام نویسنده را بدست بیاوریم آیا این الحاق توسط دستورات #C امکان پذیر است مثلا به کمک dataview یا اینکه باید دستورات برروی دیتا بیس و به کمک دستورات sql انجام شود که در این صورت دو باره باید از متد fill استفاده کنیم
ممنون از توجه شما

Developer Programmer
سه شنبه 06 اسفند 1387, 13:24 عصر
شرلوک جان،
سئوالت در مورد Fill کردن های متعدد، سالهاست که ذهن بشر رو آزار میده.
من خیلی دنبال این مطلب گشتم و در فوروم های متعددی هم پرسیدمش؛ ظاهرا هیچ راهی نداره


خوب حالا باید یک الحاق میان دو جدول انجام دهیم تا نام نویسنده را بدست بیاوریم آیا این الحاق توسط دستورات #C امکان پذیر است مثلا به کمک dataview یا اینکه باید دستورات برروی دیتا بیس و به کمک دستورات sql انجام شود که در این صورت دو باره باید از متد fill استفاده کنیمتصورم اینه که میخوای Master/Detail رو پیاده سازی کنی.
ابتدا باید با DataRelation ارتباط دو فیلد همسان از دو جدول رو مرتبط کنی، بعد اون Relation رو به DataSet مرتبط کنی.مثال خود MSDN رو درمورد DataRelation نگاه کن.

majid325
سه شنبه 06 اسفند 1387, 21:53 عصر
این جور که معلومه با fill مشکل داری ؟
بابا بالاخره هر جور داده رو به کاربر بخوای نشون بدی باید یه جوری داده رو از sql بیاری دیگه , حالا متد fill باشه یا اجرای یه متد دیگه بالاخره سربارشو رو db میزاره , نحوه نمایش مهمه , تعداد رکورد فرخوانی شده باید به تعداد لازم باشد نه بیشتر نه کمتر , حالا این وسط با روش های مختلف میتونی متد زمانبرت رو کنترل کنی در صورت لزوم.

شرلوک هلمز
شنبه 10 اسفند 1387, 22:30 عصر
از توجه همه دوستان تشکر میکنم
در نهایت فکر میکنم یکی از بهترین وراحت ترین راه ها همون نشان دادن اطلاعات به اندازه لازم به کاربر باشد چون دیگه اینجوری لازم نیست هر بار اطلاعت زیادی را fill کنیم
من از این روش مخصوصا برای ارسال اطلاعات به کریستال ریپورت زیاد استفاده کردم