PDA

View Full Version : سوال: نمایش هزاران رکورد



hst_809
سه شنبه 25 آذر 1393, 13:31 عصر
با سلام و خسته نباشید خدمت دوستان

بنده برای نمایش حدود 130 هزار رکورد در Gridview بعد از مدتی با پیغام Exception of type 'System.OutOfMemoryException' was thrown.

مواجه میشوم. میخواستم راه حل دوستان رو در این مورد بدونم و اینکه آیا امکان صفحه بندی قبل از بایند کردن دیتا وجود دارد یا خیر.
دیتا بیس مورد استفاده من DB2 میباشد که فاقد فانکشن ROW_NUMBER (که در sql استفاده میشود) میباشد.

در ضمن کل این دیتا رو حتما باید نمایش بدهم که بعدا روی هرکدوم از فیلدها فیلتر بذارم.

ahmad156
سه شنبه 25 آذر 1393, 17:55 عصر
خودتون میگین 130 هزار؟؟؟؟!!!!!:متعجب:
خب معلومه که جواب نمیده.شما باید از Paging دستی که توی تالار بحث شده و نمونه کدش موجوده استفاده کنین

hst_809
چهارشنبه 26 آذر 1393, 06:56 صبح
خودتون میگین 130 هزار؟؟؟؟!!!!!:متعجب:
خب معلومه که جواب نمیده.شما باید از Paging دستی که توی تالار بحث شده و نمونه کدش موجوده استفاده کنین




میدونم باید از paging استفاده کنم، مسئله اینه که وقتی شماره رکوردهارو ندارم ، چجوری اینکارو بکنم

iceweek
چهارشنبه 26 آذر 1393, 10:10 صبح
میدونم باید از paging استفاده کنم، مسئله اینه که وقتی شماره رکوردهارو ندارم ، چجوری اینکارو بکنم

من با این دیتابیس کار نکردم ولی حتما مسئله پیجینگ در اون هم راه حل داره.راه حل دم دستی که توصیه نمیکنم اینه همه اطلاعات که فراخانی شد توی برنامه با ابزار دات نت پیجینگ را درست کنی.

General-Xenon
چهارشنبه 26 آذر 1393, 18:49 عصر
با سلام و خسته نباشید خدمت دوستان

بنده برای نمایش حدود 130 هزار رکورد در Gridview بعد از مدتی با پیغام Exception of type 'System.OutOfMemoryException' was thrown.

مواجه میشوم. میخواستم راه حل دوستان رو در این مورد بدونم و اینکه آیا امکان صفحه بندی قبل از بایند کردن دیتا وجود دارد یا خیر.
دیتا بیس مورد استفاده من DB2 میباشد که فاقد فانکشن ROW_NUMBER (که در sql استفاده میشود) میباشد.

در ضمن کل این دیتا رو حتما باید نمایش بدهم که بعدا روی هرکدوم از فیلدها فیلتر بذارم.

علییییییییییییییییی.....130 هزارتا ....

ببین اینو تست کن ...

select top 500 * from TABLE where FIELD not in(select top PageNumber*500 FIELD from TABLE)

hst_809
پنج شنبه 27 آذر 1393, 07:57 صبح
علییییییییییییییییی.....130 هزارتا ....

ببین اینو تست کن ...

select top 500 * from TABLE where FIELD not in(select top PageNumber*500 FIELD from TABLE)


منظورتون از pagenumber چیه؟

ahmad156
پنج شنبه 27 آذر 1393, 20:08 عصر
شما باید به ازای هر صفحه از GridView تون تنها رکورد همان صفحه رو فراخوانی کنین.
اگر از Sql Server 2005 یا 2008 استفاده میکنین از ROW_NUMBER (http://msdn.microsoft.com/en-us/library/ms186734.aspx) و اگر Sql Server 2012 به بالا هست از OFFSET FETCH (http://technet.microsoft.com/en-us/library/gg699618%28v=sql.110%29.aspx) و اگر هم از MySQL استفاده میکنین از LIMIT (http://www.mysqltutorial.org/mysql-limit.aspx)استفاده کنین

General-Xenon
جمعه 28 آذر 1393, 01:52 صبح
منظورتون از pagenumber چیه؟

شماره صفحه دیگه .. شما مثلا میگی شماره صفحه 5 رو بیار .. میاد 5*500 رو در نظر نمیگیره . 500 تای اول رو میاره برات

ahmad156
جمعه 28 آذر 1393, 08:50 صبح
شماره صفحه دیگه .. شما مثلا میگی شماره صفحه 5 رو بیار .. میاد 5*500 رو در نظر نمیگیره . 500 تای اول رو میاره برات:متعجب::متعجب:
خب پس شما تعداد رکوردهای هر صفحه رو 500 در نظر گرفتین یعنی تعداد صفحات GrivdView تون میشه 260 تا.طبق نظر شما اگر من 500 تا رکورد آخر رو بخوام باید اول باید 129500 تای اول رو فراخوانی کنم بعد دوباره یه SELECT از کل رکوردها بگیرم به شرطی که رکورها توی اون 129500 تا رکورد نباشن،اونها رو فراخوانی کنن!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
اینجوری که دیتابیس تون نابود میشه.130 هزار تا رو یکجا بخونه باز هم بهتر از راه حل شماست که!
خواهشاً یه خرده به راه حلتون فکر کنین بعد به بقیه دوستان ارائه بدین.

General-Xenon
یک شنبه 30 آذر 1393, 16:48 عصر
:متعجب::متعجب:
خب پس شما تعداد رکوردهای هر صفحه رو 500 در نظر گرفتین یعنی تعداد صفحات GrivdView تون میشه 260 تا.طبق نظر شما اگر من 500 تا رکورد آخر رو بخوام باید اول باید 129500 تای اول رو فراخوانی کنم بعد دوباره یه SELECT از کل رکوردها بگیرم به شرطی که رکورها توی اون 129500 تا رکورد نباشن،اونها رو فراخوانی کنن!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
اینجوری که دیتابیس تون نابود میشه.130 هزار تا رو یکجا بخونه باز هم بهتر از راه حل شماست که!
خواهشاً یه خرده به راه حلتون فکر کنین بعد به بقیه دوستان ارائه بدین.

مدیرجان جسارت نباشه :متعجب:. Function مورد نظر Row_Number رو نداره ... یعنی Paging در SQL Server از راه Row Number منحل ... چکار باید کرد ؟ یا باید با PK یکی از فیلد ها بیاد بررسی کنه و فراخوانی کنه یا اینکه بیاد در SELECT محدود کنه ... اینکه حالا عدد 500 رو گذاشتم به عنوان تست ....
عنایت بفرمایین که خود SQL بررسی نخواهد کرد که مثلا 129500 دیگه چیه یا کجاست مثل حلقه For عمل میکنه و هنگامی که لود میکنه در اصل همان 500 تا رو برای کاربر Result میکنه .. حجم رم هم آزاد خواهد شد.... قرار نیست که 129500 تا رکورد رو Result کنه که....دقت بفرمایین

اگر این استراتژی درست نباشه باید بانک رو تبدیل کنه و Row_Number رو اقدام کنه ...

ahmad156
یک شنبه 30 آذر 1393, 21:30 عصر
ببخشید قصد جسارت ندارم ولی فکر نمیکنم کسی متوجه شده باشه شما چی گفتین حتی خودتون!!!!.


Function مورد نظر Row_Number رو نداره

واقعاً من متوجه نمیشم؟ما حرفی از Function زدیم؟


یعنی Paging در SQL Server از راه Row Number منحل ... چکار باید کرد ؟

جا خالی ها رو نمیدونم بابت چی هست دیگه؟
اگه منظورتون این هست که از ROW_Number بابت Paging استفاده نمیشه خوشحال میشم منبع تون رو بگین؟اگه استفاده نمیشه پس راه حلش چی هست؟نکنه راه حلتون کوئری خودتون هست؟؟؟
در ضمن توی Sql Server 2012 و Sql Server 2014 هم که FETCH OFFSET مطرح شده به نوعی همین عمل ROW_NUMBER رو پیاده سازی میکنه


عنایت بفرمایین که خود SQL بررسی نخواهد کرد که مثلا 129500 دیگه چیه یا کجاست مثل حلقه For عمل میکنه و هنگامی که لود میکنه در اصل همان 500 تا رو برای کاربر Result میکنه .. حجم رم هم آزاد خواهد شد.... قرار نیست که 129500 تا رکورد رو Result کنه که....دقت بفرمایین

:متعجب::متعجب::متعجب::متعجب:: تعجب::متعجب::متعجب::متعجب::م عجب:
ظاهراً شما مفهموم SubQuery رو اصلاً نمیدونین وگرنه با For مقایسه نمیکردین.یعنی چی اصلاً این حرفاتون:متعجب:بر چه پایه و اساس علمی این صحبت ها رو میکنین؟؟؟
در آخر:
دوست عزیز هیچ لزومی نداره در مورد مطلبی که اطلاعات کافی ندارین اظهار نظر کنین همون طوری بنده و خیلی از مدیران و دوستان دیگه در مورد مطلبی که اطلاعات کافی نداریم اظهار نظر نمیکنیم