PDA

View Full Version : جایگاه Dataset در برنامه نویسی لابه ای



ali_mnkt
یک شنبه 29 مرداد 1391, 14:48 عصر
سلام به همه

من در اکثر مثال هایی که از برنامه نویسی لایه ای دیدم در اونها برای واکشی مجموعه ای از داده ها از IDataReader استفاده کرده بودن و اون رو به Datasource یک grid نسبت داده بودن . خود سئوال من اینه که چرا از Dataset استفاده نمی کنن ؟ آیا استفاده از Dataset مشگلی داره ؟

veniz2008
یک شنبه 29 مرداد 1391, 15:13 عصر
سلام. برنامه نویسی تا حدود زیادی سلیقه ای هست یعنی خوبیش اینه که دست شما برای نوشتن معمولا بازه و براحتی میتونید مانور بدید. اتفاقا اکثر برنامه هایی که تا الان من دیدم از دیتاست و دیتاتیبل و دیتاویو برایپر کردن گرید استفاده کردن چون این اشیایی که نام بردم درون رم قرار میگیرن و سرعت کار کردن با اونها بسیار بالا هستش. حالا ممکنه یه نفر (یا چند نفر ) بنابر ضرورت یاسلیقه خودشون بیان و از روش های دیگه استفاده کنن.

mmd2009
یک شنبه 29 مرداد 1391, 16:55 عصر
با سلام

دلایل زیادی وجود داره که شما بین این دو یک گزینه بهتر انتخاب بکنید. در DataSet عمل Read/Write ساپورت میشه ولی در DataReader فقط عمل Read ساپورت میشه یعنی فقط خواندنی ، شما در DataReaderمیتونید فقط یک جدول قرار بدید این در صورتیه که جدول های بیشتری در DataSet میتونید قرار بدید و عمل Serialized برای DataSet ساپوت میشه ولی برای DataReader ساپورت نمیشه ، این برای کسی که با فایل های XML کار میکنه ممکنه یک امکان خیلی مفیدی باشه و خیلی تفاوت دیگه که یک برنامه نویس اصولی نویس ، همیشه سعی میکنه بهترین راهو انتخاب بکنه و نه ساده ترین راه رو.

فرضا من اگر یک برنامه بخوام بنویسم که داد های به کاربر قراره نمایش داده بشه و سپس کاربر اونهارو ویرایش کنه و دوباره ثبت بکنه ، بهترین روش استفاده از همین DataSet هست چون داده های من بدون اتصال انلاین میتونن مورد دسترسی قرار بگیرن. یکی دیگر از مزایاشم اگر ذهنم اجازه بده دسترسی تصادفی و مرتب سازی هست که این عمل برای DataReader مجاز نیست .

و در اخر باز هم میگم همه چیز به برنامه نویس و نوع برنامه ختم میشه که چرا باید از یکی از این دو شی استفاده کنیم

موفق باشید

veniz2008
یک شنبه 29 مرداد 1391, 17:55 عصر
با سلام
فرضا من اگر یک برنامه بخوام بنویسم که داد های به کاربر قراره نمایش داده بشه و سپس کاربر اونهارو ویرایش کنه و دوباره ثبت بکنه ، بهترین روش استفاده از همین DataSet هست چون داده های من بدون اتصال انلاین میتونن مورد دسترسی قرار بگیرن.
و در اخر باز هم میگم همه چیز به برنامه نویس و نوع برنامه ختم میشه که چرا باید از یکی از این دو شی استفاده کنیم
موفق باشید
ضمن تشکر از پاسخ شما. یه سوال برای من پیش اومده. شما گفتید که دیتاست خواندنی و نوشتنی هست. فرض کنید من با دیتاست اطلاعات یک رکورد رو بیرون بکشم و داخل تکست باکس ها بریزم و با یکسری تغییرات در اون تکست باکس ها بخوام یه رکورد جدید درج کنم. من در برنامه هام از کد زیر استفاده میکنم و هیچ استفاده ای از دیتاست در عمل درج انجام نمیدم.(فکر نمیکنم منظور شما این بوده باشه که با دیتاست میشه عمل درج انجام داد و با دیتاریدر نمیشه چنین کاری رو انجام داد!!) حالا همین عمل خواندن رو با DataReader هم انجام میدم و مشخصات رو داخل تکست باکس ها میریزم و باز هم از همین کد برای درج داده ها استفاده میکنم. اینجاست که فرق بین READ\Write در دیتاست و Read بودن دیتاریدر رو متوجه نمیشم. خلاصه بگم از هر کدوم از دو روش داده ها رو بخونم با کد زیر عمل درج رو انجام میدم یعنی خاصیت Write رو هم دارم. ممنون میشم این ابهام رو برام توضیح بدید.
کدی که باهاش درج میکنم:

SqlCommand cmd = new SqlCommand("insert into student(name,family)values(@nam,@famil)", conn);
cmd.Parameters.AddWithValue("@nam", textBox2.Text);
cmd.Parameters.AddWithValue("@famil", textBox3.Text);
conn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("مشخصات با موفقیت ثبت شد");
conn.Close();

mmd2009
یک شنبه 29 مرداد 1391, 20:04 عصر
من با دیتاست اطلاعات یک رکورد رو بیرون بکشم و داخل تکست باکس ها بریزم و با یکسری تغییرات در اون تکست باکس ها بخوام یه رکورد جدید درج کنم. من در برنامه هام از کد زیر استفاده میکنم و هیچ استفاده ای از دیتاست در عمل درج انجام نمیدم.(فکر نمیکنم منظور شما این بوده باشه که با دیتاست میشه عمل درج انجام داد و با دیتاریدر نمیشه چنین کاری رو انجام داد!!)

بدون شک منظور من این نبود.

ببینید شما در کدی که گداشتید از چندیدن کلاس Provider مربوط به Sql Cilent دارید استفاده بکنید و DataReader یک شی از کلاس SqlDataReader هست و نقش اون عملا در کدی که شما بعنوان Write نوشتید مشخص نیست و یا بهتر بگم اصلا چنین نقشی به این شی داده نشده است.کار اصلی شی DataReader همین عمل خواند یک رکورد در هر لحظه است . شبه کد زیر مسئله رو روشن میکنه :


while (DataReader.Read())
{
// کار با رکورد جاری
}


ولی در مورد دیتاست ، دیتاست یک بانک اطلاعاتی کوچکه به نظر من که درون حافظه قرار داره و همین امر خوش گویای اینه که فرق زمین تا اسمان رو با DataReader داره. همونطور که میدونید اصلا هیچ وابستگی هم بین Sql و دیتاست نیست ، چون شما هر نوع داده ای رو با هر نوع Provider ی رو میتونید درونش قرار بدید و همانند یک بانک اطلاعاتی جداول رو با هم رابطه بدید و خیلی کار دیگه . و با توجه به اینکه این بانک اطلاعاتی کوچک ما دارای ویژگی غیر متصل یا ( DisConnect ) بودن رو داره شما میتونید عمل ویرایش و دستابی رو باهاش انجام بدید.

این (http://support.microsoft.com/kb/307587)مقاله به شما کمک میکنه به درک بیشتر موضوع

موفق باشید