PDA

View Full Version : کاهش کارایی با query گرفتن از دیتابیس



hdv212
پنج شنبه 18 مرداد 1386, 16:24 عصر
سلام و خسته نباشید
من یه فرم دارم که اطلاعاتش از چند تا جدول میاد، زمانی هم که کاربر میخواد اطلاعاتش رو وارد کنه، این اطلاعات به جداول مخصوص خودش وارد میشه و pk اون به جدول اصلی، حالا مشکل من هم همینه چون برنامم client/server هست و وقتی کاربر اطلاعات رو ااضافه میکنه، ابتدا اطلاعات مربوط به request در جدول request وارد میشه و اطلاعات دیگه تو جدول خودش حالا توی جدول اصلی یه fk از جدول request هم وارد میشه، و چون pk جدول request توسط خود sqlServer داده شده (از طریق sp ساختم) ، لذا باید دوباره پس از وارد کردن اطلاعات جدول request، باید یه query به همین جدول بزنم و pk اون رو به دست بیارم، چون دارم از transaction استفاده میکنم به نظر شما منطقیه که یه query به دیتابیس بزنم یا راه دیگه ای برای گرفتن آخرین pk اضافه شده هست که بار انتقال داده ها توی شبکه کم بشه و کارایی برنامه پایین نیاد ؟
مرسی

mehdi.mousavi
جمعه 19 مرداد 1386, 01:02 صبح
سلام و خسته نباشید
من یه فرم دارم که اطلاعاتش از چند تا جدول میاد، زمانی هم که کاربر میخواد اطلاعاتش رو وارد کنه، این اطلاعات به جداول مخصوص خودش وارد میشه و pk اون به جدول اصلی، حالا مشکل من هم همینه چون برنامم client/server هست و وقتی کاربر اطلاعات رو ااضافه میکنه، ابتدا اطلاعات مربوط به request در جدول request وارد میشه و اطلاعات دیگه تو جدول خودش حالا توی جدول اصلی یه fk از جدول request هم وارد میشه، و چون pk جدول request توسط خود sqlServer داده شده (از طریق sp ساختم) ، لذا باید دوباره پس از وارد کردن اطلاعات جدول request، باید یه query به همین جدول بزنم و pk اون رو به دست بیارم، چون دارم از transaction استفاده میکنم به نظر شما منطقیه که یه query به دیتابیس بزنم یا راه دیگه ای برای گرفتن آخرین pk اضافه شده هست که بار انتقال داده ها توی شبکه کم بشه و کارایی برنامه پایین نیاد ؟
مرسی


سلام.
چرا عملیات Save این فرم رو، در یک مرحله انجام نمیدین؟ منظورم این هستش که اگر کلیه اطلاعاتی که قراره Save بشه بصورت Xml یا Parameters به یک SP داده بشه، اونوقت SP همه کارها رو خودش میتونه انجام بده و نیازی به داشتن یک (یا چند) Round-Trip اضافه بین Client و Server نیست. در واقع دلیلی نداره شما ID رو به سمت Client بیارید و دوباره با بخشی از اطلاعات دیگه همون فرم به یک SP دیگه بفرستید...

ضمنا، برای بدست آوردن PK هم نیازی به نوشتن یک Query نیست. می تونید از SCOPE_IDENTITY برای گرفتن ID تازه ایجاد شده استفاده کنید. (اینو با @@IDENTITY اشتباه نگیرید، چون دو کاربرد متفاوت دارن، اگر چه در اکثر مواقع یکسان بنظر میرسن).