PDA

View Full Version : سوال: استفاده از یک دیتاست برای چندین جدول



IMANAZADI
جمعه 28 مهر 1391, 19:23 عصر
با سلام خدمت دوستان عزیز
چند تا سوال برام پیش آمده یود خواستم راهنمایی درست بگیرم
از یک دیتا ست میشود چندین بار در یک برنامه استفاده کرد
برنامه زیر را در نظر بگیرید
در این برنامه از یک دیتا ست برای چندین جدول مختلف استفاده شده
آیا این طرز کد نویسی درسته و مشکلی بوجود نمیاره ؟؟
در صورت اشتباه طرز درست را عنوان کنید


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1 ()
{
InitializeComponent();
}

OleDbConnection cnn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\C:\Users\Iman\Desktop\aa.accdb");

OleDbDataAdapter da;
DataSet ds = new DataSet();


private void button1_Click (object sender , EventArgs e)
{


da = new OleDbDataAdapter("" , cnn);


da.SelectCommand.CommandText = "select [line no] , [size] from [main table]";

da.Fill(ds);

dataGridView1.DataSource = ds.Tables [0];

}

private void button2_Click (object sender , EventArgs e)
{

da = new OleDbDataAdapter("" , cnn);


da.SelectCommand.CommandText = "select [name] , [last name] from [personal]";

da.Fill(ds);

dataGridView2.DataSource = ds.Tables [0];
}

private void button3_Click (object sender , EventArgs e)
{
da = new OleDbDataAdapter("" , cnn);


da.SelectCommand.CommandText = "select [code] , [datebirth] from [book]";

da.Fill(ds);

dataGridView3.DataSource = ds.Tables [0];
}


سوال دوم همین سوال واسه دیتا آداپتر
یعنی دیتاآداپتر را چندین بار میشه استفاده کرد


آیا نوشتن


DataSet ds = new DataSet();



صحیح هست
یا باید بدین صورت تعریف کنم بعد برای استفاده در هر جا آنرا نیو کنم

DataSet ds ;


}
}

veniz2008
جمعه 28 مهر 1391, 19:39 عصر
سلام. مشکل خاصی وجود نداره ولی یه نکته ای رو فکر کنم فراموش کردید و اونم پاک کردن دیتاست قبل از پر شدن مجدد هست( ;()ds.clear ).

IMANAZADI
جمعه 28 مهر 1391, 20:05 عصر
دوست عزیز بدون خالی کردن دیتا ست هم درست جواب میده انگار خودش خالی مبکنه
آیا نوشتن دیتا ست بدین صورت صحیح هست

DataSet ds = new DataSet();


یا باید
DataSet ds ;



بدین صورت تعریف کنم بعد برای استفاده در هر جا آنرا نیو کنم

veniz2008
جمعه 28 مهر 1391, 20:11 عصر
وقتی قراره از یه دیتاست چندین مرتبه استفاده بشه،معمولا اونو در partial بصورت ;DataSet ds مینویسن و هربار که بهش نیاز داشتیم و میخواستیم ازش استفاده کنیم اونو new میکنیم. یعنی ;ds = new DataSet

Mahmoud.Afrad
شنبه 29 مهر 1391, 01:41 صبح
وقتی قراره از یه دیتاست چندین مرتبه استفاده بشه،معمولا اونو در partial بصورت ;DataSet ds مینویسن و هربار که بهش نیاز داشتیم و میخواستیم ازش استفاده کنیم اونو new میکنیم. یعنی ;ds = new DataSet
اگر هربار new کنیم دیتاست جدیدی ایجاد میشه. اگر میخواهید از یک دیتاست استفاده کنید اونو در سطح کلاس تعریف و new کنید و در متدهای دیگه ازش استفاده کنید. نیاز به new کردن مجدد نیست. فقط در این حالت چون یک دیتاست هست قبل از پر کردن نیبل ، اون تیبل رو باید clear کنید

veniz2008
شنبه 29 مهر 1391, 11:50 صبح
اگر هربار new کنیم دیتاست جدیدی ایجاد میشه.
این قسمت از پاسختون یه خورده ابهام داره.
منظور من این بوده : با new کردن، همون دیتاست( نه یک دیتاست جدید) از نو ساخته میشه. دقیقا مثل حالتیکه یه جدول از داده پر شده باشه و همون جدول رو خالی کنیم و بخوایم دوباره درونش داده بریزیم. البته این کار همونطور که شما هم گفتید با Clear کردن قابل انجام هستش. بهرحال روش ها میتونه متفاوت باشه.

Mahmoud.Afrad
شنبه 29 مهر 1391, 16:51 عصر
مگر با new کردن فضای جدیدی اختصاص داده نمیشه. یغنی دیتاست با فضای جدیدی ایجاد میشه که با قبلی متفاوت هست ولی با همون ارجاع(اسم). دیتاست قبلی هم به زباله تبدیل میشه(چون ارجاعی بهش نداریم).

veniz2008
شنبه 29 مهر 1391, 17:31 عصر
یغنی دیتاست با فضای جدیدی ایجاد میشه که با قبلی متفاوت هست ولی با همون ارجاع(اسم).
منظور من از ابهام همینجا بود که توضیح دادید. منظور از دیتاست جدید، همون دیتاست با یک فضای جدید هستش.

دیتاست قبلی هم به زباله تبدیل میشه(چون ارجاعی بهش نداریم).
دقیقا همینطوره.

Mahmoud.Afrad
شنبه 29 مهر 1391, 22:29 عصر
منظور من از ابهام همینجا بود که توضیح دادید. منظور از دیتاست جدید، همون دیتاست با یک فضای جدید هستش.
نه منظورم یک دیتاست جدید با همون نام هست دقیقا برعکس چیزی که شما گفتید.
فرض کنید دیتاست شما با چند جدول پر شده. حالا اگر دیتاست رو دوباره new کنید این دیتاست جدید خالیه و به اطلاعات جداول دیتاست قبلی دیگه دسترسی ندارید. پس بهتره فقط همون جدول مورد نظر را clear و دوباره پر کنید دقیقا کاری که اگر به صورت ویزارد هم یک جدول را به یک کنترل بایند کنید هربار برای پر کردن همین کار رو میکنه یعنی به جای new کردن میاد و اون دیتاتیبل را clear و دوباره پر میکنه.

veniz2008
شنبه 29 مهر 1391, 22:44 عصر
نه منظورم یک دیتاست جدید با همون نام هست
ممنونم از پاسخ شما. فقط یه سوال : کامپایلر چطور به دو تا دیتاست مختلف با یک نام یکسان گیر نمیده؟.
آیا با New کردن، دیتاست قبلی حذف (dispose ) میشه؟. چون شما گفتید که دیتاست قبلی وجود داره و فقط با ایجاد دیتاست جدید، دیگه به اون دیتاست قبلی ارجاع داده نمیشه.

Mahmoud.Afrad
یک شنبه 30 مهر 1391, 04:04 صبح
ارجاع همون نامی هست که دیتاست با اون قابل دسترس هست. حالا اگر مجددا new کنیم این ارجاع(نام) به فضای جدید تخصیص پیدا میکنه و دیگه به فضای قبلی ارجاعی وجود نداره(یعنی در اصل فضای قبلی بدون نام میشه) که در اینصورت فضای قبلی با همه اطلاعاتش به عنوان زباله شناخته میشه.
اگر دیتاست را مجددا new کنیم دو فضا بوجود میاد یکی با ارجاع(جدیده) و یکی بدون ارجاع(قدیمیه).

veniz2008
یک شنبه 30 مهر 1391, 10:09 صبح
متاسفانه من هنوز از توضیحات شما قانع نشدم. باور کنید قصد لجبازی ندارم فقط میخوام مطلب رو بصورت علمی و درست یاد بگیرم چون احتمالش زیاده که درآینده بخوام این موضوع رو برای کسی توضیح بدم واسه همین میخوام مطلب صحیح رو یاد بگیرم.
من هنوز به جواب این سوالم نرسیدم : آیا با new کردن، فضای دیتاست قبلی از بین میره؟(طبق گفته های شما، اینطور نیست و یک دیتاست جدید با همون نام در یک فضای جدید ایجاد میشه که ارجاع به این دیتاست جدید صورت میگیره). حالا با در نظر گرفتن پاسخ شما، سوال اصلی من اینه : کامپایلر سی شارپ، چطور اجازه ساخت دو دیتاست (قبلی و جدید) رو با یک نام میده؟

Mahmoud.Afrad
پنج شنبه 04 آبان 1391, 00:02 صبح
گفتم که دو دیتاست با یک نام نیستند. بلکه نام(ارجاع) از دیتاست قبلی برداشته میشه و به دیتاست جدید تخصیص پیذا میکنه. دیتاست قبلی بی نام ، زباله و حذف میشه.

mozhdeh_d
یک شنبه 24 دی 1391, 16:59 عصر
سلام
یه سوال داشتم
وقتی دیتاست رو با ویزارد می سازیم ، مسیرش چجوری میشه ؟ بعد از گرفتن ستاپ برای پروژه ، آیا دسترسی به اون وجود داره ؟ یا باید چیزی رو تغییر بدیم ؟

ma.rad
یک شنبه 24 دی 1391, 18:12 عصر
سلام
یه سوال داشتم
وقتی دیتاست رو با ویزارد می سازیم ، مسیرش چجوری میشه ؟ بعد از گرفتن ستاپ برای پروژه ، آیا دسترسی به اون وجود داره ؟ یا باید چیزی رو تغییر بدیم ؟

بله دسترسی وجود داره، مسیر خاصی نداره، هرجا خواستید می تونید فراخوانیش بکنید