PDA

View Full Version : چطور میشه حین اجرای برنامه ، کوئری رو تغییر داد؟



دختر کوهستان
جمعه 10 دی 1389, 12:29 عصر
سلام دوستان. من یه صفحه توی سایتم دارم که کل کتابهای موجود در انبارم رو توی یه gridview نشون میده. این گرید هم متصله به یه sqldatasource که از جدول select می کنه. یه جدول هم شامل چند تا لینک باتن کنار صفحه دارم که موضوعات کتابها رو نشون میده. می خوام وقتی روشون کلیک می کنم فقط کتابهایی رو که در اون موضوع قرار دارند رو نشون بده. این کار رو جوری انجام میدم.
Sqldatasource1.selectcommand= Sqldatasource1.selectcommand+" where type=@type"

یه dropdown list هم دارم که نتایج رو بر اساس قیمت یا تاریخ انتشار یا .. مرتب می کنه.برای کد کلیک هر کدوم از آیتم های این dropdownlist هم یه order by … به انتهای کوئری sqldatasource اضافه کردم.مشکل من اینجاست که این dropdownlist یا اون لینک باتن ها هر کدوم به تنهایی درست عمل می کنند اما من می خوام که اینها هر کدوم روی نتایج کار عنصر قبلی کار انجام بدن نه روی کوئری اولیه ای که من به عنوان sqldatasource.selectcommand تعیین کردم. چطور میشه کاری کرد که در واقع یه جوری کار قبلی تو حافظه ی صفحه بمونه؟

behiunforgiven
جمعه 10 دی 1389, 23:50 عصر
به نظر من به این ترتیب عمل کن که اگه او dropdownlist ها خالی نیستند شرط مربوط به هر کدوم رو اضافه کن به آخر query مربوطه.

دختر کوهستان
شنبه 11 دی 1389, 11:44 صبح
به نظر من به این ترتیب عمل کن که اگه او dropdownlist ها خالی نیستند شرط مربوط به هر کدوم رو اضافه کن به آخر query مربوطه.

درست متوجه نشدم منظورتون چیه. اما من برای drop downlist همین کار رو کردم و فقط یه order by به آخر کوئری اضافه کردم اما این کوئری رو، اون کوئری اولیه که قبل از اجرای برنامه به sqldatasource دادم در نظر می گیره ، نه کوئری ای که بعد از اعمال شرط موضوع کتاب به دست اومده

rana-writes
شنبه 11 دی 1389, 12:13 عصر
سلام
شما چرا از یه StoredProcedure استفاده نمیکنین ؟
اینطوری که خیلی راحت تر میتونین متغیرهاتون رو بهش پاس بدین امنیت و سرعتش هم بالاتره

دختر کوهستان
یک شنبه 12 دی 1389, 22:54 عصر
سلام
شما چرا از یه StoredProcedure استفاده نمیکنین ؟
اینطوری که خیلی راحت تر میتونین متغیرهاتون رو بهش پاس بدین امنیت و سرعتش هم بالاتره

با این روش آشنایی ندارم. میشه یه مثال بزنین؟

Mohandes2009
یک شنبه 12 دی 1389, 23:48 عصر
سلام دوستان. من یه صفحه توی سایتم دارم که کل کتابهای موجود در انبارم رو توی یه gridview نشون میده. این گرید هم متصله به یه sqldatasource که از جدول select می کنه. یه جدول هم شامل چند تا لینک باتن کنار صفحه دارم که موضوعات کتابها رو نشون میده. می خوام وقتی روشون کلیک می کنم فقط کتابهایی رو که در اون موضوع قرار دارند رو نشون بده. این کار رو جوری انجام میدم.
Sqldatasource1.selectcommand= Sqldatasource1.selectcommand+" where type=@type"

یه dropdown list هم دارم که نتایج رو بر اساس قیمت یا تاریخ انتشار یا .. مرتب می کنه.برای کد کلیک هر کدوم از آیتم های این dropdownlist هم یه order by … به انتهای کوئری sqldatasource اضافه کردم.مشکل من اینجاست که این dropdownlist یا اون لینک باتن ها هر کدوم به تنهایی درست عمل می کنند اما من می خوام که اینها هر کدوم روی نتایج کار عنصر قبلی کار انجام بدن نه روی کوئری اولیه ای که من به عنوان sqldatasource.selectcommand تعیین کردم. چطور میشه کاری کرد که در واقع یه جوری کار قبلی تو حافظه ی صفحه بمونه؟

یه dropdown list بزار و براساس اینکه چه آیتمی در dropdown list انتخاب میشه گرید را فیلتر کن و اطلاعاتش را بیار

دختر کوهستان
دوشنبه 13 دی 1389, 10:35 صبح
یه dropdown list بزار و براساس اینکه چه آیتمی در dropdown list انتخاب میشه گرید را فیلتر کن و اطلاعاتش را بیار

مگه همون order by که به آخر command اضافه بشه عمل فیلتر رو انجام نمیده؟
با کلیک dropdown آخه تشخیص نمیده که من قبلش روی موضوع کتاب هم کلیک کردم.

javad.nic63
دوشنبه 13 دی 1389, 10:53 صبح
order by فقط مرتب می کنه. شما برای این موضوع باید session تعریف کنی و وقتی رو موضوع کتاب کلیک میکنی اون session پر بشه و براساس اون session نتیجه رو بهت نشون بده. بعدش با تغییر dropdown هم اون session رو فراخونی و توی کدت استفاده کنی و هم از طریق dropdown بتونی مرتب کنی.


select * from tableName where noe="+convert.tostring(session["filter"])+" order by "+dropdownlist1.selectedvalue

mehrdad201
دوشنبه 13 دی 1389, 14:50 عصر
فیلتر کردن با order by متفاوت هست. order by میاد رکوردها رو مرتب میکنه. اما فیلتر کردن میاد بعضی از رکوردها رو حذف میکنه.

دختر کوهستان
دوشنبه 13 دی 1389, 15:34 عصر
order by فقط مرتب می کنه. شما برای این موضوع باید session تعریف کنی و وقتی رو موضوع کتاب کلیک میکنی اون session پر بشه و براساس اون session نتیجه رو بهت نشون بده. بعدش با تغییر dropdown هم اون session رو فراخونی و توی کدت استفاده کنی و هم از طریق dropdown بتونی مرتب کنی.


select * from tableName where noe="+convert.tostring(session["filter"])+" order by "+dropdownlist1.selectedvalue


حالا اگه اول بخوام روی dropdownlist کلیک کنم بعد روی موضوع چی؟ اینجا هم باید از session استفاده کنم؟

javad.nic63
دوشنبه 13 دی 1389, 16:38 عصر
اینجا دیگه کار سخت میشه. باید یک sp بسازی و مثلاً اگه خواستی همه گروهها رو نشون بدی و با dropdownlist مرتب بشه باید مقدار session رو مثلاً صفر بدی. و بعد توی sp بگی اگه صفر بود این کوئری کل رکوردها رو نشون بده اگه نه فقط رکوردهایی رو نشون بده که که session با اون برابره.
اگه خواستی برات sp رو می نویسم. ولی تا فردا صبر کن برادر عزیز.

دختر کوهستان
دوشنبه 13 دی 1389, 18:14 عصر
اینجا دیگه کار سخت میشه. باید یک sp بسازی و مثلاً اگه خواستی همه گروهها رو نشون بدی و با dropdownlist مرتب بشه باید مقدار session رو مثلاً صفر بدی. و بعد توی sp بگی اگه صفر بود این کوئری کل رکوردها رو نشون بده اگه نه فقط رکوردهایی رو نشون بده که که session با اون برابره.
اگه خواستی برات sp رو می نویسم. ولی تا فردا صبر کن برادر عزیز.

sp مخفف چیه؟ این جور که شما میگین حتما بایدیکی از آیتم های dropdownlist انتخاب بشه؟ یعنی در واقع وقتی روی موضوع کلیک می کنیم فقط session مقداردهی بشه و تغییر دستور sql تو کلیک dropdown باشه. شاید کاربر روی dropdown کلیک نکنه. درواقع آیتم اولیش هم که به طور پیش فرض select هست یه همچین چیزیه:"لطفا از لیست زیر انتخاب کنید"

mehrdad201
دوشنبه 13 دی 1389, 18:56 عصر
sp همون stored procedure هست. در دیتابیس شما میتونید توابع رو تعریف کنی و بعد پارامترها رو از دات نت بهش ارسال کنی و خروجی رو دریافت کنی

این کار هم از نظر امنیت و هم سرعت مناسب تر از ساختن کوئری ها در خود دات نت و اجرای اونهاست

javad.nic63
دوشنبه 13 دی 1389, 21:22 عصر
حتماً لازم نيست dropdownlist رو انتخاب كني. مي توني مقدار برگشت داده شده از dropdownlist رو هم توي يه متغير مانند session بريزي و دقيقاً كاري كه با انتخاب dropdownlist كردي رو با كليك بر روي buttonها بكني. sp قابليت هاي زيادي داره و ترافيك شبكه رو كم ميكنه. سرعت اجراي دستورات هم بسيار بالاتر از دستور sql معمولي است. امنيت هم كه خيلي بهتر ميشه.
حتماً يه تحقيق درمورد sp بكن. خيلي خوبه