تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 17

نام تاپيک: لود اطلاعات SQL با استفاده از BackgroundWorker

  1. #1
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض لود اطلاعات SQL با استفاده از BackgroundWorker

    سلام
    من از کد زیر در جست و جو هام استفاده می کنم .
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    میخوام وقتی که روی دکمه ی جست و جو وارد می کنم و این اطلاعات رو لود داره می کنه توی دیتا گرید یه فرم باز بشه شامل یه اسکرول بار و میزان لود شدن اطلاعات رو نشون بده و یه دکمه کنسل هم براش بزارم که وقتی کلیک شد از ادامه لود اطلاعات جلوگیری کنه.
    البته دوستان روش BackgroundWorker رو پیشنهاد دادند . منم دنبالش روش و در این مورد چیز هایی رو هم پیدا کردم. اما نحوه جست و جوی اون ها به یک شکل دیگر بود و با کد جست و جوی من همخوانی نداشت و باید برای اینکه از اون روش استفاده کنم کل فانکشن هام رو تغییر بدم و به طور طبع کد هایی که از این تابع ها استفاده می کنه.
    میخوام ببینم میشه توی این کد من هم همچین کاری کرد. ممنون میشم اگه کمک بفرمایید.

  2. #2
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    یعنی راهی نیست که بشه با این روش انجامش داد؟

  3. #3
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    میتوانید عملیات بارگذاری را در ریسمان مجزایی انجام دهید و در این بین هم یک تصویر gif یا پیامی برای انتظار نشان دهید ولی نشان دادن نوار پیشرفت (بیان درصد) کد زیادی میخواهد چون اغلب ORM های موجود این درصد را بیان نمیکنند و آن را پشتیبانی نمیکنند که البته تا حدودی هم حق دارند!

    کد نمونه:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Last edited by _H2_; 09-11-2013 at 21:35.

  4. #4
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    بله ممنون.

    نظرتون راجع به این کد چیه :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    نمیشه مثلا تعداد نتایج جست و جویی که به دست میاد رو با استفاده از دستور Count در اس کیو ال به دست آورد و سپس با یه دست اومدن هر سطر از جست و جو یک مقدار از 0 شروع کنه و تا رسیدن به مقدار count یکی یکی اضافه بشه و یا همچین چیزی؟
    اصلا این روش ، روش حرفه ای و مناسبی هست؟!
    ممنون از وقتی که میذارید.

  5. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام مجدد
    ارائه نوار پیشرفت برای این منظور کلاً منطقی نیست:
    1) ORM ها درصد خواندن اطلاعات را پشتیبانی نمیکنند.

    2) اگر خودتان هم بخواهید اطلاعات را بخوانید مجبور میشوید یکبار Count بگیرید و یکبار هم بخوانید.
    دستور Count برخلاف ظاهر ساده اش دستور پرهزینه است و نیاز است موتور دیتابیس یکبار کل پرس و جو را اجرا و نتایج را شمارش کند،
    در واقع شما مجبور میشوید دوبار از دیتابیس استعلام بگیرید و در نهایت هم بجای ORM های موجود خودتان باید اطلاعات را بخوانید تا بدانید چند سطر را خوانده اید!!!

    3) اصولاً بارگذاری اطلاعات شما از دیتابیس نباید آنقدر زمان بر باشد که نوار پیشرفت بخواهید.
    حتی اگر عملیات تان چند ثانیه هم بطول بکشد باز نیازی به نوار پیشرفت نیست.
    اگر هم حجم اطلاعات واکشی شده بسیار زیاد است (مثلاً چند ده هزار سطر) منطق آن است که یک مکانیزم صفحه بندی مناسب در برنامه تان پیاده سازی کنید تا بعنوان نمونه هربار فقط 100 سطر واکشی شود.

    پیشنهاد میکنم به یک تصویر gif چرخان اکتفا کنید.
    این مورد خیلی مرسوم و عادی است
    بهتر است برای اعمالی که چندین دقیقه بطول میکشد در جهت پیاده سازی نوار پیشرفت تلاش کنید.
    موفق باشید.

  6. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  7. #6
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    ممنون از راهنماییتون.
    نمیشه همه ی این کد ها روی توی یه Sub نوشت ؟ آخه اینجوری که 3 تا شد . باعث میشه من مجبور بشم کل کدهام رو تغییر بدم و کلا به هم میریزه

    و اینکه میشه یک این تصویر یا پیغام لطفا صبر کنید را در یک فرم دیگه قرار داد و در اون فرم یک دکمه انصراف قرار داد تا با کلیک روی اون عملیات متوقف بشه؟

  8. #7
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    اول در مورد پست سوم خودم باید عرض کنم که اشتباهاً در محل فراخوانی تابع EndLoadData مجدد AsyncLoadData درج شده بود که تصحیح کردم.

    نمیشه همه ی این کد ها روی توی یه Sub نوشت ؟ آخه اینجوری که 3 تا شد . باعث میشه من مجبور بشم کل کدهام رو تغییر بدم و کلا به هم میریزه
    باید فقط دو تابع دیگر اضافه کنید، چرا باید کل کدها را تغییر دهید؟
    اگر راضی تان میکند، اینطوری هم میشود و یک تابع هم خواهد بود!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و اینکه میشه یک این تصویر یا پیغام لطفا صبر کنید را در یک فرم دیگه قرار داد
    بله به سادگی


    در اون فرم یک دکمه انصراف قرار داد تا با کلیک روی اون عملیات متوقف بشه؟
    چون حلقه پر کننده دیتاست داخل ORM است و به آن دسترسی نداریم، اگر بخواهیم عملیات را متوقف کنیم باید قبل عملیات اشاره گر ریسمان را ذخیره و درصورت لزوم آن را ناچار به Abort ریسمان خواهیم بود.
    یک چیز تو مایه های مشابه EndTask یک برنامه در ویندوز!
    من کدش را برایتان میگذارم (نگویید هرچه میخواهم، راه نمایی نمیکنند و آیه یاس میخوانند! )، ولی باور بفرمائید یک عملیات چند ثانیه ای ارزش این Abort را ندارد (حتی ارزش آن فرمی که بازشود را هم ندارد!)، احتمالاً در اکثر مواقع قبل از انکه کاربرتان متوجه شود و تصمیم بگیرید که میخواهد یا نمیخواهد عملیات را لغو/متوقف کند، عملیات تمام شده و رفته!!!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  9. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  10. #8
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    اول از همه ممنون برای وقتی که میذارید.
    در مورد به هم ریختن کد با این کد جدیدی که دادید میتونم حلش کنم .ممنون

    بله در مورد اینکه اطلاعات سریع لود میشه من هم با شما موافقم . در واقع فکر کنم مشکل اصلی که برای من به وجود میاد به خاطر اینه که من اطلاعات رو قصد دارم از اینترنت و یک سرور روی نت بخونم به همین دلیل گفتم شاید در خوندن اطلاعات به دلیل سرعت اینترنت کمی زمان بر باشه .
    مورد دیگه ای که ممکنه پیش بیاد اینه که وقتی میخواد به سرور متصل بشه تنظیمات کانکشن استرینگ روی 30 ثانیه هست و در صورتی که به هردلیلی مثلا قطع بودن یا کند بودن سرعت اینترنت نتونه اطلاعات رو دریافت کنه در این صورت وقتی روی دکمه ی جست و جو کلیک کنه در این 30 ثانیه به نوعی برنامه گیر میکنه و دیگه نمیشه کاری انجام داد تا اون 30 ثانیه بگذره و بگه که ارتباط برقرار نشد . در این مورد راه کار چیه ؟!!

    ببخشید یک سوال دیگه هم داشتم ولی نمیدونستم عنوانش رو چی بذارم . در همینجا مطرح میکنم با اجازتون .


    من در فرمم حدود 15 تا چک باکس قرار دادم برای جست و جو که بشه عملیات جست و جو رو بر اساس فیلد های مختلف انجام بشه .
    مثلا تعیین کنه که جست و جو بر اساس نام،نام خانوادگی،تلفن،کد ملی و . . .
    ولی نمیدونم چه طور باید این کد هایی که دارم رو قرار بدم . درواقع مشکل من اینجاست که چه طور بفهمم کدام یک از چک باکس ها فعال هست و بعد بر اساس اون ها کد جست و جو رو قرار بدم.
    برای مثال ممکنه هر 15 تا چک باکس فعال باشه و یا چک باکس های 1،5،7،9،12 فعال باشه .
    پیشنهاد شما استفاده از چه دستوری است. من خواستم از دستور IF استفاده کنم که دیدم خیلی تو در تو و پیچیده میشه .
    حالا اگه همه چک باکس ها فعال باشند زیاد مشکلی نیست اما اینکه کد رو برای حالت های مختلف تعداد چک باکس های فعال تنظیم کنیم سخته . ممکنه 2 چک باکس فعال باشه ( این دو چک باکس هم میتونه تعداد زیادی حالت داشته باشه. مثلا چک باکس 1 و 2 یا چک باکس 2 و 4 و یا چک بامس 10 و 5 )
    امیدوارم منظورمو درست رسونده باشم.
    در واقع مشکل اصلی فکر کنم انتخاب اینه که از چه ساختاری استفاده کنیم. مثلا IF , Select case , For و . . . .

  11. #9
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    در این مورد راه کار چیه ؟!!
    دو زمان timeout یکی برای ارتباط و یکی برای اجرا قابل تنظیم است.
    timeout ارتباط از طریق connectionstring انجام میشود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و timeout اجرا را هم میتوانید مستقیم تغییر دهید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    از چه ساختاری استفاده کنیم
    ساختارهایی با پایه تفکری مانند این گمانم مشکلتان را حل کند:
    البته میتوانید الگو را گرفته و تغییرات بسیاری بدهید
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشید.

  12. #10
    پروفشنال shadmehrshadow1's Avatar
    تاريخ عضويت
    Oct 2009
    پست ها
    842

    پيش فرض

    ممنون .

    در مورد :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این 60 یعنی چی؟! یعنی 60 ثانیه منتظر می ماند که دستور اس کیو ال که برای جست و جو داده ایم اجرا شود . و در صورتی که از این 60 ثانیه بگذرد دستور لغو می شود؟ و یا یک همچین چیزی و یا حتی 60 ثانیه منتظر می ماند که ارتباط به دیتابیس برقرار شود؟!
    در صورتی که این چنین باشد تغییری در اصل مسئله نمی کند و باز هم یک 60 ثانیه زمان انتظار به وجود آمده که کاربر باید صبر کند.
    شاید من متوجه این قطعه کد و منظورتون نشدم.

    اما در مورد کد شرطی . ممنون از راهنماییتون.

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •