PDA

View Full Version : سوال: فرق بین DataTable با DataView



RoostaYeBekr
چهارشنبه 08 آبان 1387, 01:01 صبح
با سلام
می خواستم بپرسم کسی فرق بین DataTable را با DataView می داند؟:متفکر:

یا مثلا کسی می داند که اگر ما تعدادی رکورد را از دیتابیس بگیریم و مستقیما در DataTable بریزیم ، سرعتش بیشتر است ، یا اینکه داده هایمان را مستقیما در DataView بریزیم؟

با تشکر

baran_mehr
چهارشنبه 08 آبان 1387, 13:01 عصر
datatable این شئ برای نشون دادن یک جدول جدا تو حافظه هست(جدول منفرد). با این شی میتونیم به صورت مستقیم با داده ها کار کنیم اما فکر میکنم view یک جدول مجازی باشه که اطلاعات ما رو به صورت مجازی داخل خودش نگه میداره و احتمال میدم سرعت ویو بالاتر باشه.

RoostaYeBekr
چهارشنبه 08 آبان 1387, 14:11 عصر
datatable این شئ برای نشون دادن یک جدول جدا تو حافظه هست(جدول منفرد). با این شی میتونیم به صورت مستقیم با داده ها کار کنیم اما فکر میکنم view یک جدول مجازی باشه که اطلاعات ما رو به صورت مجازی داخل خودش نگه میداره و احتمال میدم سرعت ویو بالاتر باشه.

آخه مسئله این هست که هم با DataTable و هم با DataView می توان به صورت مستقیم با داده ها کار کرد .
بعد یک مسئله ای هم که وجود دارد این است که اکثریت فکر می کنند که DataTable ، فقط زمانی که اطلاعاتی را از دیتابیس می گیریم و حالا می خواهیم آن ها را در چیزی بریزیم ، کاربرد دارد . در حالی که اینطور نیست. ما می توانیم در خود برنامه هم یک DataTable درست کنیم و بعد داده هایی را در آن بریزیم که اصلا از دیتابیس نیاورده ایم و بعد در برنامه از آن استفاده کنیم.

به هر حال اگر کسی اطلاعات بیشتری دارد ، ممنون می شوم اگر راهنمایی کند.

baran_mehr
چهارشنبه 08 آبان 1387, 16:33 عصر
دوست عزیز فکر کنم منظورم رو درست متوجه نشدید.
من منظورم این بود که datatable مقداری از حافظه رو برای خودش میگیره و به خودش تخصیص میده. datatable یک شی جدول هست.اما تا اونجایی که میدونم view تا زمانی که نخواهیم ازش استفاده کنیم فضایی رو نمیگیره یعنی به صورت مجازی کار میکنه(یک شمائ یا نما از جدول رو به ما نشون میده)

baran_mehr
چهارشنبه 08 آبان 1387, 16:50 عصر
آیا شما میتونید به dataview مقداری رو Insert کنید؟

RoostaYeBekr
چهارشنبه 08 آبان 1387, 18:51 عصر
آیا شما میتونید به dataview مقداری رو Insert کنید؟
چرا نمیشه؟


/////////////////////////////////////////////////////////////

protected void Page_Load(object sender, EventArgs e)
{
/*..........Insert In DataView..............*/
DataView l_DataView = new DataView();
l_DataView.Table = this.give_DataTable().Copy();
l_DataView.Table.Columns.Add("FirstName");
l_DataView.Table.Columns.Add("LastName");
System.Data.DataRow rowm = l_DataView.Table.NewRow();
rowm["FirstName"] = "Shima";
rowm["LastName"] = "Amir";
l_DataView.Table.Rows.Add(rowm);
/*..........Insert In DataTable..............*/
DataTable l_DataTable = new DataTable();
l_DataTable = this.give_DataTable().Copy();
l_DataTable.Columns.Add("Telephone");
l_DataTable.Columns.Add("Mobile");
System.Data.DataRow rowz = l_DataTable.NewRow();
rowz["Telephone"] = 2502364;
rowz["Mobile"] = 0910256547;
l_DataTable.Rows.Add(rowz);
/*...........................................*/
}
/////////////////////////////////////////////////////////////

private DataTable give_DataTable()
{
DataTable l_DataTable = new DataTable();
l_DataTable.TableName = "theName";
return l_DataTable;
}
/////////////////////////////////////////////////////////////

به دلیل اینکه اکثر کارهایی را که با DataTable می توان انجام داد ، با DataView هم می توان انجام داد ، به خاطر همین است که من هنوز درست متوجه نشدم که فرق این دو تا در چیست؟

baran_mehr
جمعه 10 آبان 1387, 16:37 عصر
DataView نمای فیلتر شده و مرتب شده از یک DataTable را در اختیار ما میزاره.
ردیف های DataView هر چند بسیار شبیه DataRow ها هستند ولی عملا این اشیاء DataRowView هستند که به DataRow ها ارجاع میدهند.

RoostaYeBekr
جمعه 10 آبان 1387, 18:06 عصر
DataView نمای فیلتر شده و مرتب شده از یک DataTable را در اختیار ما میزاره.
ردیف های DataView هر چند بسیار شبیه DataRow ها هستند ولی عملا این اشیاء DataRowView هستند که به DataRow ها ارجاع میدهند.

با سلام و تشکر
باز هم متوجه منظورتان نشدم. اینکه می گویید : یک نمای مرتب شده از DataTable ،
مگر DataTable ، نامرتب است که حالا یک نمای مرتب شده از آن بخواهیم بسازیم . البته به احتمال 90 درصد می خواستید بگوئید که DataView ، فیلتر شده ی DataTable است . حتی اگر این طور هم باشد و ما نیاز داشته باشیم که DataTable مان را فیلتر کنیم ، خوب چرا از روی داده های DataTable اصلی ، یک DataTable دیگر با مقادیر فیلترشده نسازیم؟ :گریه:منظورم این است که وقتی می شد که ما با DataTable ، تمام کارها را انجام دهیم ، خوب چرا یک چیز جدید دیگر ساخته اند؟

m.hamidreza
جمعه 10 آبان 1387, 18:52 عصر
A dataset is an in-memory representation of a database-like structure. It can have one or more datatables and define relations between them, key field etc.
A datatable is an in-memory representation of a single database table. You can think of it as having columns and rows in the same way.
A dataview is a view on a datatable, a bit like a sql view. It allows you to filter and sort the rows - often for binding to a windows form control.


http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx
http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx
http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

موفق باشید.

RoostaYeBekr
شنبه 11 آبان 1387, 00:04 صبح
A dataset is an in-memory representation of a database-like structure. It can have one or more datatables and define relations between them, key field etc.
A datatable is an in-memory representation of a single database table. You can think of it as having columns and rows in the same way.
A dataview is a view on a datatable, a bit like a sql view. It allows you to filter and sort the rows - often for binding to a windows form control.


http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx
http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx
http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

موفق باشید.
دستتان درد نکنه . خیلی عالی بود . :تشویق:بالاخره جواب را گرفتم . فقط ببخشید این مطلبی که در کادر فرستاده بودید ، منبعش را هم می گوئید.

با توجه به اینکه DataView شبیه به View دیتابیس ، از روی یک جدول اصلی ساخته می شود ، پس همانطور که حدس می زدم ، DataTable سرعت بالاتری دارد.
البته اینکه DataView به DataTable وابسته است ، از روی کدهایی که خودم در بالا فرستادم هم معلوم بود. به خاطر کد زیر :


l_DataView.Table = this.give_DataTable().Copy();

در حالیکه عکس کد بالا ظاهرا انجام نمی شود.