PDA

View Full Version : برای نمایش داده ها در گرید ویو کدام بهتر است dataset یا sqlDataSource



sarapepors
جمعه 11 فروردین 1391, 08:19 صبح
سلام . اگر بخواهیم داده های مربوط به جدول یا جداولی از پایگاه داده را در یک کنترل داده ای مانند گرید ویو نمایش دهیم استفاده از کدام یک بهتر است ؟ دیتا ست و دیتا تیبل یا sqlDataSource من بیشتر از sqlDataSource استفاده میکنم و میخوام بدونم کار درستیه یا نه ؟
مرسی از همگی.

hamid_shrk
جمعه 11 فروردین 1391, 10:04 صبح
استفاده از دیتا شورس خیلی راحت تره و بهتره به نظر من و اگه از برنامه نویسی چند لایه استفاده میکنید استفاده از object data source پیشنهاد میشه.

sarapepors
دوشنبه 14 فروردین 1391, 19:09 عصر
متشکرم .
وقتی که از دیتا تیبل استفاده میکنیم به پایگاه متصل میشیم و اطلاعات رو میخونیم و بعد هم کانکشن close میشه و بدون این که کانکشن باز باشه ما میتونیم اطلاعات رو در دسترس داشته باشیم میخوام بدونم زمانی که از یک sqldatasource استفاده میکنیم هم همین طوره به عنوان مثال من یک sp مینویسم و یک sqldatasource رو هم میذارم رو صفحه که بایند میشه به اون sp و بعد هم از یک gridview استفاده میکنم و datasource اون رو برابر با sqldatasource قرار میدم در این حالت میخوام بدونم که به چه شکل هست ؟؟ یعنی مثل دیتا تیبل هست با توجه به توضیحاتی که در ابتدا دادم (از نظر سرعت و هزینه متصل بودن به پایگاه؟؟)

hamid_shrk
دوشنبه 14 فروردین 1391, 19:42 عصر
تا اونجایی که من مطالعه داشتم sqldatasource خودش کانکشن رو close نمیکنه و ما باید بعد از خوندن دیتا اون رو Dispose کنیم.
این موضوع رو مطمئن نیستم و فقط تو چندتا سایت خارجی خوندم.
دوستان دیگه اگه نظر بدن ممنون میشم.

ahmad156
دوشنبه 14 فروردین 1391, 20:06 عصر
فکرکنم تفاوت این دو همون مبحث
" strongly typed " and "weekly typed"

توی asp.net هست
یه مقاله کوچک در موردش
http://www.4guysfromrolla.com/articles/020806-1.aspx

d_derakhshani
دوشنبه 14 فروردین 1391, 21:53 عصر
اينكه كانكشن close ميشه يا خير بايد گفت كه sqldatasource به نحوه درستي كانكشن هاي شما رو مديريت ميكنه. در مورد dataTable و DataSet هم حتما بعد استفاده كامل در page كانكشن رو ببنيد. در اين صورت كانكشن به Connection pool بر ميگرده(در connection pool براي پايگاه داده باز مي مونه)
در مورد connection pooling اينجا جا مناسبي براي توضيحش نيست، اما در يك توضيح مختصر محلي ست كه كانكشن ها بعد از استفاده به آنجا مي روند و تعداد شون محدود است. براي مثال اگه 100 اتصال لازم باشد اما اندازه connection pool مقدار 15 باشد 85 اتصال بايد صبر كنند تا مابقي كار خود رو تموم كنند. پس بهتره بعد از انجام كار هرچه زودتر كانكشن رو ببنديد تا نوبت به بقيه پروسس ها هم برسد(هرچند كه اندازه كانكشن پول قابل تنظيم است)
اما در مورد DataSource و DataTable بايد بگم DataSource به صورت خودكار paging‌ رو ساپورت ميكنه. سعي كنيد يك gridview رو با datatable پر كنيد و روش paging بزاريد.خواهيد ديد كه كار نخواهد كرد. و كار هم به اين راحتي ها نيست(هر چند خيلي هم سخت نيست). دوم اينكه بعد از بارگذاري داده در gridview شي datatable از بين مي رود و براي نگاه داشتن داده هاي آن در postback بايد از cache ستفاده كنيد. در حالي كه datasource به صورت خودكار اين كارها رو مديريت ميكنه و انجام ميده.
به غير از paging، چيزهايي ديگه اي هم از كار مي افته

hamid_shrk
دوشنبه 14 فروردین 1391, 22:09 عصر
اينكه كانكشن close ميشه يا خير بايد گفت كه sqldatasource به نحوه درستي كانكشن هاي شما رو مديريت ميكنه. در مورد dataTable و DataSet هم حتما بعد استفاده كامل در page كانكشن رو ببنيد. در اين صورت كانكشن به Connection pool بر ميگرده(در connection pool براي پايگاه داده باز مي مونه)
در مورد connection pooling اينجا جا مناسبي براي توضيحش نيست، اما در يك توضيح مختصر محلي ست كه كانكشن ها بعد از استفاده به آنجا مي روند و تعداد شون محدود است. براي مثال اگه 100 اتصال لازم باشد اما اندازه connection pool مقدار 15 باشد 85 اتصال بايد صبر كنند تا مابقي كار خود رو تموم كنند. پس بهتره بعد از انجام كار هرچه زودتر كانكشن رو ببنديد تا نوبت به بقيه پروسس ها هم برسد(هرچند كه اندازه كانكشن پول قابل تنظيم است)
اما در مورد DataSource و DataTable بايد بگم DataSource به صورت خودكار paging‌ رو ساپورت ميكنه. سعي كنيد يك gridview رو با datatable پر كنيد و روش paging بزاريد.خواهيد ديد كه كار نخواهد كرد. و كار هم به اين راحتي ها نيست(هر چند خيلي هم سخت نيست). دوم اينكه بعد از بارگذاري داده در gridview شي datatable از بين مي رود و براي نگاه داشتن داده هاي آن در postback بايد از cache ستفاده كنيد. در حالي كه datasource به صورت خودكار اين كارها رو مديريت ميكنه و انجام ميده.
به غير از paging، چيزهايي ديگه اي هم از كار مي افته
با تشکر از توضیح کاملتون که من هم به دانشم اضافه شد این نکته رو هم اضافه کنم که با sqldatasource امکان sort هم به گرید ویو اضافه میشه که خیلی مثبته این امکان.

ali.a.j
دوشنبه 14 فروردین 1391, 22:22 عصر
دوستان میشه قطعه کد های مربوط به dataset و datatable v رو اینجا بگذارید .ممون میشم

d_derakhshani
دوشنبه 14 فروردین 1391, 22:36 عصر
با تشکر از توضیح کاملتون که من هم به دانشم اضافه شد این نکته رو هم اضافه کنم که با sqldatasource امکان sort هم به گرید ویو اضافه میشه که خیلی مثبته این امکان.
خواهش مي كنم. در مورد datasource گفتم جز paging چيزهاي ديگه اي هم از كار ميافته كه sort هم يكي از اونهاست. البته بعضي موقع ها(در موارد خاص) مجبور به استفاده از datatable مي شويد و data source جواب گو نخواهد بود. در اين مورد بايد از ICollection، DataView و Cache استفاده كنيد. كد نمونه در زير آوردم:

ICollection CreateDataSource()
{
SqlConnection connection = new SqlConnection(Session[connectionString);
SqlDataAdapter adapter = new SqlDataAdapter(spName, connection);
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
Cache["myData1"] = new DataTable();
//if have parameters, add them here
//adapter.SelectCommand.Parameters.AddWithValue("paramName1", paramValue1);

connection.Open();
try
{
adapter.Fill(Cache["myData1"] as DataTable);
}
catch (Exception ex)
{
MsgBox(ex.Message);
}
connection.Close();

DataView dv = new DataView(Cache["myData1"] as DataTable);
return dv;
}

كد مربوط به پر كردن gridview

GridView1.DataSource = CreateDataSource();
GridView1.DataBind();

sarapepors
جمعه 15 اردیبهشت 1391, 10:17 صبح
استفاده از دیتا شورس خیلی راحت تره و بهتره به نظر من و اگه از برنامه نویسی چند لایه استفاده میکنید استفاده از object data source پیشنهاد میشه.
باسلام .
میشه در این رابطه کمی توضیح بدید. متشکرم

hamid_shrk
جمعه 15 اردیبهشت 1391, 10:35 صبح
باسلام .
میشه در این رابطه کمی توضیح بدید. متشکرم
در مورد sqlDataSource آقای d_derakhshani (http://barnamenevis.org/member.php?170559-d_derakhshani) توضیحات کاملی دادند!

sarapepors
جمعه 15 اردیبهشت 1391, 11:22 صبح
آقای d_derakhshani راجع به استفاده از object datasource در بزنامه نویسی چند لایه توضیحی ندادند نمیدونم شاید من خوب نخوندم . من معمولا از sqldatasource استفاده میکردم منتها زمانی که از پند لایه استفاده میشه ارتباط با db فقط باید در لایه dal باشه و وقتی من از sqldatasource استفاده کنم در لایه interface به دیتا بیس وصل میشم ! میخواستم بدونم چطور با استفاده از objectdatasource میشه از این کار جلوگیری کرد . متشکرم

hamid_shrk
جمعه 15 اردیبهشت 1391, 11:38 صبح
یک ObjectDataSource بزارید تو صفحه و توی قسمت choose your business object متد مورد نظرتون رو از لایه ها بگیرید.
من خودم از معماری لایه ای استفاده میکنم اما در عین حال تو صفحات مدیریتم از SqlDataSource استفاده میکنم !! چون بهتره.