PDA

View Full Version : طریقه پر شدن SqlDataSource



rana-writes
دوشنبه 04 بهمن 1389, 12:29 عصر
سلام
من دارم یه سایت طراحی میکنم که بخشهای موضوعی مختلفی داره مثل اجتماعی - خانواده و .. که برای هر کدوم از این بخشها نویسندگان میتونن پست بذارن
من برای هر category یک جدول در نظر گرفتم و توی سایتم و برای فرخوانی هر چیزی با توجه به Category انتخاب شده توسط کاربر، داده ها رو از جدولهای مختلف فراخوانی میکنم.
حالا برای صفحه مدیریت مطالب، من از یک گریدویو و SqlDataSource های مختلفی که استورپروسیجرهای مختلفی رو فراخوانی میکنه، برای نمایش مطالب استفاده میکنم
سوالم اینه که وقتی صفحه ای لود میشه، این SqlDataSource ها همه شون پر میشن؟ یا زمانی که به یه گرید نسبت داده شدن پر میشن؟
مثلا من هفت تا SqlDs دارم که هر بار با توجه به CatId یکیشون رو به گریدم نسبت میدم، آیا بقیه Sqlds ها هم با رکوردها پر میشن؟
ممنون از راهنماییتون

alonemm
دوشنبه 04 بهمن 1389, 19:25 عصر
با سلام:
ببنيد مسئله داده هايي كه به SQLDS ريخته ميشن با داده هايي كه به گريد يا ليست يا ... بايند ميشن فرق داره.
مثل شما SQLDS رو يك ظرف در نظر بگيريد كه داده ها رو از جدول مربوطه داخل ريختيد و گريد رو هم يك ظرف ديگه كه داده هاي اون رو نمايش ميده.

پس اگه شما عمليات بايند داده رو در روييدادي مثل PageLoad انجام بديد اين ظرف ها به صورتي كه حتي اگه نياز هم نباشه از داده پر ميشند.
اگه اين رو لازم نداريد در رويداد مربوطه اين عمليات رو انجام بديد تا هم سرعت و كلا بهينه تر باشه.


موفق باشيد.

aserfg
دوشنبه 04 بهمن 1389, 20:26 عصر
سلام ،

سوالم اینه که وقتی صفحه ای لود میشه، این SqlDataSource ها همه شون پر میشن؟
در هر باری که اطلاعات از سرویس دهنده به سمت سرویس گیرنده پاس داده می شه هر کدی که درون سورس صفحه باشه اجرا می شه ، حالا اگه شما برای بایند شدن اطلاعات به این منیع های داده (sqldatasource) پارامتر تعریف کردین یعنی لازمه تا رشته تقاضایی ارسال بشه و توسط اون اطلاعات به دیتا سورس ریخته بشه لزوما خیر .
دوست گرامی با توجه به پست مورد اشکال شما {http://barnamenevis.org/showthread.p...�-ویزارد (http://barnamenevis.org/showthread.php?271485-%D9%BE%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-SqlDataSource-%D8%A8%D8%A7-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B1-C-%D8%A8%D9%87-%D8%AC%D8%A7%DB%8C-%D9%88%DB%8C%D8%B2%D8%A7%D8%B1%D8%AF)} احتمال می دم در کدنویسی شما مشکلاتی باشه (البته حدسه) یعنی شاید نیازی به قرار دادن چند تا sqldatasource نباشه .
دقت کنید در صورتی که حدس من درست باشه شما حجم اطلاعات رو در تبادلات سرویس دهنده و سرویس گیرنده زیاد کردین که روی performance تاثیر خوهد گذاشت . (معمولا بعد از هاست مشکلات خودشون رو نشون می دن )

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

موفق و موید باشید .

rana-writes
دوشنبه 04 بهمن 1389, 21:17 عصر
سلام ،

در هر باری که اطلاعات از سرویس دهنده به سمت سرویس گیرنده پاس داده می شه هر کدی که درون سورس صفحه باشه اجرا می شه ، حالا اگه شما برای بایند شدن اطلاعات به این منیع های داده (sqldatasource) پارامتر تعریف کردین یعنی لازمه تا رشته تقاضایی ارسال بشه و توسط اون اطلاعات به دیتا سورس ریخته بشه لزوما خیر .
دوست گرامی با توجه به پست مورد اشکال شما {http://barnamenevis.org/showthread.p...�-ویزارد (http://barnamenevis.org/showthread.php?271485-%D9%BE%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-SqlDataSource-%D8%A8%D8%A7-%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B1-C-%D8%A8%D9%87-%D8%AC%D8%A7%DB%8C-%D9%88%DB%8C%D8%B2%D8%A7%D8%B1%D8%AF)} احتمال می دم در کدنویسی شما مشکلاتی باشه (البته حدسه) یعنی شاید نیازی به قرار دادن چند تا sqldatasource نباشه .
دقت کنید در صورتی که حدس من درست باشه شما حجم اطلاعات رو در تبادلات سرویس دهنده و سرویس گیرنده زیاد کردین که روی performance تاثیر خوهد گذاشت . (معمولا بعد از هاست مشکلات خودشون رو نشون می دن )

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

موفق و موید باشید .

دقیقا منظورم رو درست متوجه شدید
میخواستم ببینم با این کار کارایی برنامه م چطوری میشه
مرسی از راهنماییتون
اما متاسفانه نیاز به این چند تا دیتاسورس دارم، چون هم اینکه باید از جدولهای مختلف بخونم، هم باید بر حسب موضوع و تاریخ و هر نویسنده روشون شرط بذارم

rana-writes
دوشنبه 04 بهمن 1389, 21:18 عصر
با سلام:
ببنيد مسئله داده هايي كه به SQLDS ريخته ميشن با داده هايي كه به گريد يا ليست يا ... بايند ميشن فرق داره.
مثل شما SQLDS رو يك ظرف در نظر بگيريد كه داده ها رو از جدول مربوطه داخل ريختيد و گريد رو هم يك ظرف ديگه كه داده هاي اون رو نمايش ميده.

پس اگه شما عمليات بايند داده رو در روييدادي مثل PageLoad انجام بديد اين ظرف ها به صورتي كه حتي اگه نياز هم نباشه از داده پر ميشند.
اگه اين رو لازم نداريد در رويداد مربوطه اين عمليات رو انجام بديد تا هم سرعت و كلا بهينه تر باشه.


موفق باشيد.

مثالی که زدین عالی بود، تا حالا اینطوری به قضیه نگاه نکرده بودم، پس باید توی هر رویداد اینکارو کنم
ممنونم

alonemm
سه شنبه 05 بهمن 1389, 18:07 عصر
مثالی که زدین عالی بود، تا حالا اینطوری به قضیه نگاه نکرده بودم، پس باید توی هر رویداد اینکارو کنم
ممنونم
سلام دوست من:

البته شما ميتونيد بجاي يك شي با استفاده از كلاس ها عمليات بايند رو انجام بديد بجاي يك شي مثل SQLDataSourc رو انجام بديد.
و ميتونيد با كش كردن اطلاعات سرعت رو بالا ببريد.

rana-writes
سه شنبه 05 بهمن 1389, 20:57 عصر
سلام دوست من:

البته شما ميتونيد بجاي يك شي با استفاده از كلاس ها عمليات بايند رو انجام بديد بجاي يك شي مثل SQLDataSourc رو انجام بديد.
و ميتونيد با كش كردن اطلاعات سرعت رو بالا ببريد.

من توی کارهام و برای فراخوانی های دیگه از SqlDataReader و کلاسها استفاده میکنم اما چطوری میشه دیتاسورس یه گرید رو به یه DataReader منتسب کرد
مثلا من از یه همچین کدی برای فراخوانی استفاده میکنم


public static SqlDataReader ShowPostFrEdit_Soc(int PostId)
{
SqlConnection connection = ConnectionManager.ConnectToHalghehMagDB();
SqlCommand command = new SqlCommand("HASoc_ShwPstFEdit", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@PostId", SqlDbType.Int).Value = PostId;
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection);
return reader;
}

حالا این کد که فقط یه رکورد برمیگردونه، اما میشه مشابه همین کد رو که مثلا چند تا رکورد برمیگردونه به یه دیتاگرید نسبت داد؟
اینطوری توی سرعت کار تاثیر داره؟

aserfg
چهارشنبه 06 بهمن 1389, 08:04 صبح
در مورد datareader ،
شی فوق قادر به برقراری يك ارتباط مستقيم و زنده با بانك اطلاعاتی نیست و معمولا برای برگرداندن مقادیر رشته ای از اون استفاده می شه . شما می تونید یه dataset یا datatable رو توسط این شی ء پر کنید (با ایجاد datarow,...) بعد این شی رو به خاصیت دیتا سورس یک کنترل داده ای نسبت بدین .
موفق باشید .

V0R73X
چهارشنبه 06 بهمن 1389, 09:21 صبح
شیء Datareader نمیتونه DataSource باشه، واسه همین احتمالا کد شما کار نمیکنه.
پیشنهاد میکنم به جاش از DataSet و DataAdapter برای پر کردنش استفاده کنید، بعد از Dataset به عنوان DataSource استفاده کنید. بعد هم عمل Binding رو انجام بدین آخر کدهاتون (Gridview.DataBind) رو اضافه کنید.
با این روش دیگه مشکلی نیست.

rana-writes
چهارشنبه 06 بهمن 1389, 11:58 صبح
حالا من یه سوالی دارم
استفاده از این روش ها یعنی کار با DataSet و DataAdapter نسبت به SqlDataSource سریع تر اطلاعات رو لود میکنه؟

aserfg
چهارشنبه 06 بهمن 1389, 12:46 عصر
كنترل های ObjectDataSource ، SqlDataSource و XmlDataSource برای هر کنترل نسبت دهی مانند گرید ویو یک کوئری روی منبع داده اجرا می کنند . و همچنین در هر پست بک (خودش یه نوع تصاعدهندسیه!!) بنابراین استفاده از توابع اختصاصی (به قول شماDataSet و... ) در صورتی که در رویدادهای درست صدا زده شوند می شه بگیم بهترند .
ولی این کنترلها به طور ذاتی (و به طرز شگفت انگیزی و ساده ای) از caching پشتیبانی می کنند در صورتی که از این خواص درست استفاده بشه . باز کفه ترازو به سمت این کنترلها سنگین خواهد شد .

alonemm
چهارشنبه 06 بهمن 1389, 18:41 عصر
سلام دوست من:
كلا سرعت لود كلاس ها نسبت به شي هاي داده اي بالاتر هست و استفاده از SP ها در روند سرعت لود كوئري ها خيلي تاثير گزار هست.
و همچنين مواقع رو رعايت كنيد كه بايند اضافي نداشته باشيد.


موفق باشيد.