PDA

View Full Version : تفاوت DataTable و Dataset ؟



jas1387
یک شنبه 15 فروردین 1389, 13:28 عصر
سلام دوستان عزیز

من جدیدا دیدم که دوستان زیاد از DataTable استفاده می کنند ( من تازه زیاد می بینم دلیل نمی شود که دوستان قبلا استفاده نمی کردن ) چند سوال دارم ممنون می شم که مرا در رسیدن به جواب یاری کنید

1. تفاوت DataTable و DataSet در چی هست ؟
2. شباهت آنها در چی هست ؟
3. من فکر می کنم Dataset می تواند چند تا جدول را در خود جای بدهد در صورتی که DataTable باید یه جدول را در خود جای دهد ، درست هست یا نه ؟
4. کار کردن با کدوم برای یه پروژه درست حسابی بهتر است ؟
5. من توی پروژه ام جدول های زیادی دارم ، توصیه می کنید که از کدومش استفاده کنم و چرا ؟

Afshin160
یک شنبه 15 فروردین 1389, 13:37 عصر
با سلام ...
DataSet مجموعي از DataTableها است .
خوب ديگه فرقها و شباهت هايش هم معلومه ... اما در رابطه با موارد استفاده با توجه به برنامه خودتون بايد به صورت تجربي به دست آوريد . و فقط به اين موضوع توجه داشته باشيد كه سرعت در DataTable بيشتر است.

saed2006
یک شنبه 15 فروردین 1389, 13:44 عصر
dataset همون طور که از نامش پیداست یک منبعی هست برای ذخیره داده ها
این داده ها میتونن
datatable
view
یا هر شیی باشن

datatable هم که برای ذخیره اطلاعا ت جدول هست

alireza_s_84
یک شنبه 15 فروردین 1389, 13:48 عصر
سلام دوستان عزیز

من جدیدا دیدم که دوستان زیاد از DataTable استفاده می کنند ( من تازه زیاد می بینم دلیل نمی شود که دوستان قبلا استفاده نمی کردن ) چند سوال دارم ممنون می شم که مرا در رسیدن به جواب یاری کنید

1. تفاوت DataTable و DataSet در چی هست ؟
2. شباهت آنها در چی هست ؟
3. من فکر می کنم Dataset می تواند چند تا جدول را در خود جای بدهد در صورتی که DataTable باید یه جدول را در خود جای دهد ، درست هست یا نه ؟
4. کار کردن با کدوم برای یه پروژه درست حسابی بهتر است ؟
5. من توی پروژه ام جدول های زیادی دارم ، توصیه می کنید که از کدومش استفاده کنم و چرا ؟
یک مثال میزنم DataTable میشه جدول یک دیتابیس و Dataset میشه دیتابیس ما بدون مکان فیزیکی یعنی توی حافظه.

jas1387
یک شنبه 15 فروردین 1389, 17:28 عصر
4. کار کردن با کدوم برای یه پروژه درست حسابی بهتر است ؟
5. من توی پروژه ام جدول های زیادی دارم ، توصیه می کنید که از کدومش استفاده کنم و چرا ؟

لطفا به این دو سوال هم پاسخ بدهید

alireza_s_84
یک شنبه 15 فروردین 1389, 17:59 عصر
لطفا به این دو سوال هم پاسخ بدهید
این بستگی به طراحی و نوع کاربرد داره:
شما در یک پروژه ویندوزی برای Bind کردن و نمایش اطلاعات ناگزیر به استفاده از dataset هستید(حداقل برای رهایی از کدنوشتن های اضافی و بیخود).
مدیریت relation ها و کلیدها و ... با چند دیتاتیبل مجزا امکانپذیر نیست شما به یک دیتاست برای انجام اینکار نیاز دارید. در هر حال دیتاتیبل از دیتاست جدا نیست. گفتم دیتاست مانند یک دیتابیس مقیم در حافظه ست و دیتاتیبل جدولهای این دیتابیسه.
اگر شما در پروژه تون نیاز به ارتباط مابین جداول و مدیریت کلیدها و ... دارید باید از دیتاست استفاده کنید و اینکه سرعت دیتاتیبل بیشتره یا دیتا ست هیچ معنی نمیده چون دیتاست از خودش هیچ داده ای نداره بلکه داده ها در یک دیتاتیبل و در درون این دیتاست قرار میگیرن.
بهر حال استفاده از این دو جدا از هم نیست.
موفق باشید

mahmoodramzani
یک شنبه 15 فروردین 1389, 18:06 عصر
اینکه بگید از کدوم استفاده کنم درست نیست.
چون وقتی شما DataSet دارید حتما چند تا DataTable هم دارید که توی DataSet هستند.
در واقع اینجوریه که شما همیشه DataTable رو دارید وقتی که لازم باشه در کنارش از DataSet هم استفاده می کنید و اگه لازم نباشه نمی کنید.

Open-Source
یک شنبه 15 فروردین 1389, 18:55 عصر
برای خوندن ونمایش اطلاعات از datareader استفاده کنید.
برای گزارشگیری نا گزیر به استفاده از dataset هستید.
نظر من بود.

jas1387
یک شنبه 15 فروردین 1389, 19:41 عصر
شما در یک پروژه ویندوزی برای Bind کردن و نمایش اطلاعات ناگزیر به استفاده از dataset هستید(حداقل برای رهایی از کدنوشتن های اضافی و بیخود).


من دارم گیج می شوم شما می گوید که از دیتاست استفاده کنم ( روش ویزاردی ) برای رهایی از کدهای اضافی در صورتی که در تایپکی به من توصیه شد که روش ویزاردی را به کلی کنار بزارم
خب ، حالا اگه من برای بارگذاری اطلاعات بخواهم از یه دیتاست استفاده کنم و هم از روش کد نویسی چگونه کانکشنی که دیتاست ایجاد می کند را کنترول کنم و با کانکشن کد نویسی هماهنگ کنم ( برنامه من تحت سرور هست و باید کانکشن آن آی پی سرور بگیرد حالا چگونه این کانکشن ها را تنظیم کنم ؟)

سوال دیگه کجا از dataset استفاده می شود و کجا از datatable ؟
آیا برای جدول های که با جدول های دیگر ارتباط ندارن از DataTable استفاده می شود و برای جدول های که با هم در ارتباط هستند که از Dataset استفاده می شود ؟

jas1387
یک شنبه 15 فروردین 1389, 19:46 عصر
دوستان لطفا با در نظر گرفتن موارد زیر به سوال بالای من جواب بدهید

برنامه ای که من می خواهم بنویسم باید

1. تحت شبکه کار کند
2.در آن از برنامه نویسی 3 لایه استفاده شده باشد
3.باید از Store procedure استفاده شود
4. و ...

alireza_s_84
یک شنبه 15 فروردین 1389, 20:01 عصر
من دارم گیج می شوم شما می گوید که از دیتاست استفاده کنم ( روش ویزاردی ) برای رهایی از کدهای اضافی در صورتی که در تایپکی به من توصیه شد که روش ویزاردی را به کلی کنار بزارم
خب ، حالا اگه من برای بارگذاری اطلاعات بخواهم از یه دیتاست استفاده کنم و هم از روش کد نویسی چگونه کانکشنی که دیتاست ایجاد می کند را کنترول کنم و با کانکشن کد نویسی هماهنگ کنم ( برنامه من تحت سرور هست و باید کانکشن آن آی پی سرور بگیرد حالا چگونه این کانکشن ها را تنظیم کنم ؟)

سوال دیگه کجا از dataset استفاده می شود و کجا از datatable ؟
آیا برای جدول های که با جدول های دیگر ارتباط ندارن از DataTable استفاده می شود و برای جدول های که با هم در ارتباط هستند که از Dataset استفاده می شود ؟
دوست عزیز مگر استفاده از دیتاست فقط روش ویزاردی است؟؟؟
شما نیازمند یک دیتاست برای تعریف کردن روابط مابین جداول و حفظ یکپارچگی داده ها هستید. ضمنا دوستانی که از روشهای ویزاردی دوری مکنن باید بدونن که ترکیب روش های ویزاردی با روشهای کدنویسی دستی بهتر از یک روشه.
شما چند لایه برنامه بنویس چه ایرادی داره اگر یک متد داری که یکسری اطلاعات رو از دیتابیس استخراج میکنه و اونها فقط داده های یک جدول هستن خوب معلومه شما باید از دیتاتیبل استفاده کنی اما اگر قرار باشه رکوردی رو دارای کلید خارجی است بروز رسانی کنی خوب قاعدتا استفاده از دیتاست اصولی تر و درست تر از دیتا تیبل است که باید بصورت دستی این موارد رو کنترل کنی.
ضمنا به نظر من ایجاد یک دیتاست از دیتابیس و قرار دادن تمامی جداول در آن بصورت ویزاردی هیچ ایرادی نداره و شما میتونید یک کلاس برای لایه DAL داشته باشید و با پاس دادن همین جداول بروز رسانی کنید و این راه بسیار بهتر از اینه که شما بشینی تک تک فیلدها رو با ایندکس یا نام بایند کنی و یا بروز کنی.
ترکیب دیتاست مقیم در حافظه و کلاسی برای مدیریت آن بسیار اصولی ، کارآمد و در عین حال هزینه کمتری نسبت به بکار گیری روشهای متعصبانه و ... است.
اگر روش ویزاردی بد بود اصلا چرا ایجاد شد اگر بهترین روشه چرا بعضی ها نهی میکنن؟؟؟
این چیزی جز روش های خودون نیست اما من میگیم دو روش رو بکار بگیر و بجای بروز رسانی با Adaptor هایی که دیتاست میسازه شما لایه Dal رو خودت مدیریت کن.
شما انتظار نداشته باش من به شما بگم اگر شما یک دیتا گرید در فرمی دارید که 50 فیلد رو نشون میده لطف کن دستی مقدار دهی کن چون به هیچ عنوان قابل قبول نیست شما برای اینکار نیازمند یک دیتاست ویزاردی هستی و ضمنا برای بروز رسانی میتونی بجای adaptor های ویزاردی از کلاسهای خودت استفاده کنی. چند لایه بودن هم حفظ میشه.
امیدوارم بقیه اساتید هم تشریف بیارن واسه بحث.

jas1387
یک شنبه 15 فروردین 1389, 22:43 عصر
دوست عزیز مگر استفاده از دیتاست فقط روش ویزاردی است؟؟؟
شما نیازمند یک دیتاست برای تعریف کردن روابط مابین جداول و حفظ یکپارچگی داده ها هستید. ضمنا دوستانی که از روشهای ویزاردی دوری مکنن باید بدونن که ترکیب روش های ویزاردی با روشهای کدنویسی دستی بهتر از یک روشه.
شما چند لایه برنامه بنویس چه ایرادی داره اگر یک متد داری که یکسری اطلاعات رو از دیتابیس استخراج میکنه و اونها فقط داده های یک جدول هستن خوب معلومه شما باید از دیتاتیبل استفاده کنی اما اگر قرار باشه رکوردی رو دارای کلید خارجی است بروز رسانی کنی خوب قاعدتا استفاده از دیتاست اصولی تر و درست تر از دیتا تیبل است که باید بصورت دستی این موارد رو کنترل کنی.
ضمنا به نظر من ایجاد یک دیتاست از دیتابیس و قرار دادن تمامی جداول در آن بصورت ویزاردی هیچ ایرادی نداره و شما میتونید یک کلاس برای لایه DAL داشته باشید و با پاس دادن همین جداول بروز رسانی کنید و این راه بسیار بهتر از اینه که شما بشینی تک تک فیلدها رو با ایندکس یا نام بایند کنی و یا بروز کنی.
ترکیب دیتاست مقیم در حافظه و کلاسی برای مدیریت آن بسیار اصولی ، کارآمد و در عین حال هزینه کمتری نسبت به بکار گیری روشهای متعصبانه و ... است.
اگر روش ویزاردی بد بود اصلا چرا ایجاد شد اگر بهترین روشه چرا بعضی ها نهی میکنن؟؟؟
این چیزی جز روش های خودون نیست اما من میگیم دو روش رو بکار بگیر و بجای بروز رسانی با Adaptor هایی که دیتاست میسازه شما لایه Dal رو خودت مدیریت کن.
شما انتظار نداشته باش من به شما بگم اگر شما یک دیتا گرید در فرمی دارید که 50 فیلد رو نشون میده لطف کن دستی مقدار دهی کن چون به هیچ عنوان قابل قبول نیست شما برای اینکار نیازمند یک دیتاست ویزاردی هستی و ضمنا برای بروز رسانی میتونی بجای adaptor های ویزاردی از کلاسهای خودت استفاده کنی. چند لایه بودن هم حفظ میشه.
امیدوارم بقیه اساتید هم تشریف بیارن واسه بحث.

ضمن تشکر از شما دوست عزیز


از اساتید محترم کسی این نوشته را تایید یا نسبت به آن نقدی ندارد ؟

من می خواهم پروژه ام را شروع کنم ، می خواهم از بهترین روش استفاده کنم

FastCode
دوشنبه 16 فروردین 1389, 19:25 عصر
من با alireza موافقم ولی کلا" دیتاست چیز خوبی نیست و در کل کند عمل میکنه و توی زمان الگوریتمهاش چیزی به اسم Log(2,n) وجود نداره.

من شخصا" از دیتاست فقط به عنوان MetaData-Storage استفاده میکنم چون مایکروسافت بیشتر روی قضیه ی متا دیتا کار کرده تا روی خود دیتا.:لبخند:

hakelberfin
سه شنبه 17 فروردین 1389, 00:54 صبح
دوست عزیزمون AliReza توضیح کامل رو دادن . من هم توضیح مختصری عرض می کنم

در طراحی بانک اطلاعاتی ، شما برای موجودیتهاتون تعدادی جدول طراحی میکنید. این جداول بهتره که صرفا برای یه موجودیت طراحی بشن . مثلا موجودیت مشتری یه جدول و برای موجودیت کالا یه جدول دیگه

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

حال برمیگردیم به موضوع اصلی
در زمان طراحی ، شما میخواین فرمی رو طراحی کنین که اطلاعات مشتری ( مشخصات و کالاهای انتخابیش ) رو نشون بدید. مثلا در فرمتون دو DataGridView دارین که در اولی اطلاعات مشتری ها و در دومی اطلاعات کالا های انتخابی یه مشتری که در جدول بالایی سطرش انتخاب شده.
شما برای اینکار دو روش دارید.

1. روش اول . شما از استفاده میکنید و اطلاعات اون جداول رو (مشتری و کالا) به همراه ارتباط و کلید ها و ... به کلاستون Bind میکنید و از خاصیت های BindingContext و CurrencyManager و DataBinding و ... استفده میکنید .
. یعنی اطلاعات فیزیکی رو مثلا ازSQL خونده و در یه محیط مجازی به نام Dataset قرار میدید. و ارتباط با دیتابیس بسته میشه (تکنولوژی ADO.NET) و از اون اطلاعات استفاده میکنید.
2.روش دوم . شما هر زمان و در هر قسمتی که لازم باشه اطلاعات لازمه رو میخونید .
مثلا ابتدا جدول مشتری هاتون رو پر میکنید و بعد با انتخاب هر سطر از این جدول اطلاعات جدول دوم رو پر میکنید.
حال ما با این کار نداریم که کدوم از روش های بالا خوبه یا بده . این بسته به طراحیتون داره .
اگه شما میخواین جداول رو به صورت کلی با ارتباطشون و ...(مزایای DataSet) بخونید چاره ای جز استفاده از DataSet وندارین. ولی اگه میخواین مثلا یه کنتری مثل DataGridView یا Combobox رو پر کنید استفاده از DataTable خیلی بهتره و ساده تر و ... ه
در بیشتر پروژه هایی که در این سایت نوشته شده اعمالی مثل پرکردن DataGridView یا Combobox رو با DataSet نوشتن که به نظر من در این حالت DataTable بهتر بود.

یه داستان کوچولو در این مورد:
یه دانشمندی یه سگ و یه گربه داشت ، برای اینکه این گربه ش و سگش بتونن براحتی بیرون برن بیان ،
یه در برای گربه (به اندازه گربه) و یه در برای سگ(به اندازه سگ ) ساخته بود .