View Full Version : كار با dataset
hamednazarzadeh
چهارشنبه 02 اردیبهشت 1388, 16:28 عصر
سلام
من يك ديتابيس اكسس دارم كه محتويات يكي از جداولش رو داخل يك dataset مي ريزم.
حالا مشكلم اينه كه مي خوام يك عمل update رو با دستورات sql روي اين dataset انجام بدم.
بعد محتواي اين dataset رو به جدولم در اكسس اضافه كنم(اضافه نه جايگزين!).
اگر كسي روش اين كار رو با يه نمونه كد بهم توضيح بده ممنون مي شم.
antisocial
چهارشنبه 02 اردیبهشت 1388, 18:10 عصر
DataSet dset = new DataSet();
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < dset.Tables[0].Rows.Count; i++)
{
if (dset.Tables[0].Rows[i].RowState == DataRowState.Added) MessageBox.Show(dset.Tables[0].Rows[i][1].ToString());
}
}
این کد به دردت میخوره باید روی حلقه ی For اش بیشتر کار کنی
با یه دیتاگریدویو امتحان کن
تمام سطرهای اضافه شده رو تشخیص میده البته من فقط برای یک ستون رو نوشتم
موفق باشین
hamednazarzadeh
پنج شنبه 03 اردیبهشت 1388, 06:51 صبح
از راهنماييتون ممنونم.
ولي منظور من اضافه كردن يك سطر به dataset نيست.من مي خوام بر روي داده هاي داخل dataset يك query اجرا كنم.مثلا بگرده و هر جا فيلد name=ali بود ، اون رو به reza تغيير بده.
بعدا كل اطلاعات dataset رو به ديتابيسم اضافه كنم.يعني اينكه بدون اينكه اطلاعات ديتابيس رو تغيير بدم ، هر چي توي dataset هست رو به ديتابيس اضافه كنم.
ممنون مي شم اگر راهنمايي بفرماييد.
saeed-kh
پنج شنبه 03 اردیبهشت 1388, 09:32 صبح
خب متد selectدرdatasetهین کار رو واستون انجام میده.
ویه آرایه از datarowواستون برمیگردونه.
بعد شما میتونید با داشتن rowاون سط رو تغییر بدید.
DataRow[] Rows=Dataset1.Tables[1].Select("FirstName = '" + Textbox1.Text + "'");
foreach (DataRow row in Rows)
Dataset1.Tables[1].Rows[Dataset1.Tables[1].Rows.IndexOf(row)][1] = "REZA";
که FirstNameنام ستونی در جدولت هست.
وبرای هر سطر پیدا شده ستون دوم رو تغییر میده
خب اگه میخوای سطر رو بر حسب مقادیر چند ستون پیدا کنی؛بازم با همون دستورات SQLوSelectمثلا
Dataset1.Tables[1].Select("FirstName = '" + Textbox1.Text + "' AND LastName = '" + Textbox2.Text + "'");
البته شاید راههای بهتری هم باشه که اگه هست دوستان دیگه لطفا بگن.ممنون
hamednazarzadeh
پنج شنبه 03 اردیبهشت 1388, 10:16 صبح
سعيد جان ، خيلي خيلي ممنونم از جوابتون.مشكل اولم حل شد.
حالا مي خوام محتويات dataset رو به ديتابيس اضافه كنم ، بدون اينكه تغييري روي داده هاي قبلي ديتابيس بوجود بياد.
مثلا اگر قبلا 100 ركورد داخل ديتابيس داشتم و الان 20 ركورد داخل dataset دارم ، اين 20 تا رو بدون تغيير ديتابيس به آخرش اضافه كنم.(تا در مجموع 120 تا ركورد داخل ديتابيس قرار بگيره)
ديتابيسم هم access هستش.ممنون مي شم اگر يكي از دوستان راهنمايي بفرمايند.
saeed-kh
پنج شنبه 03 اردیبهشت 1388, 12:39 عصر
اصلا شما چرا dataset رو ساختی پس؟؟
datasetهمون بانک هست دیگه.
چرا همین کار رو در dataset انجام نمیدی.
خب dataset همون اول تمام اون 100 رکورد رو داره،یعنی میخوای اون 100 رکورد رو هم datasetپاک کنی.بعد 20 تا اضافه کنی.
خب همینجا 20 رکورد رو هم اضافه کن.کارت راحتر میشه..
این کارت غیر منطقیه.
در هر صورت اگه بخوای این کار رو بکنی باید مستقیم بریزی تو بانک.یعنی کانکشن بسازی و تمام رکوردایdatasetرو بریزی تو بانک.
متدGetChanges()هم در جداولdatasetدرنظر داشته باش.کمک زیادی بهت میکنه.
hamednazarzadeh
پنج شنبه 03 اردیبهشت 1388, 13:23 عصر
ببخشيد . ولي منظورم اين نبود
من چند تا از ركوردهاي ديتابيس رو select مي كنم و داخل dataset مي ريزم.بعدش محتويات داخل dataset رو تغيير مي دم.
تا اينجاش مشكلي نيست.حالا مي خوام بدونم كه چطوري محتويات dataset رو به بانك اطلاعاتيم اضافه كنم.يعني اينكه add كنم به ديتابيس نه update.
masoud.ramezani
پنج شنبه 03 اردیبهشت 1388, 16:19 عصر
برای پیدا کردن سطرهایی که مخواهید تغییر کند از DataView استفاده کنید. سپس dv رو سطر به سطر پیمایش کنید و تغییرات خود رو روی اون اعمال کن. بعد رو db ذخیره کن.
saeed-kh
پنج شنبه 03 اردیبهشت 1388, 17:47 عصر
خب فرض کنیم 20 تا سطر به dataset اضافه کردی و هنوز از متدGetChanges()در datasetاستفاده نکردی
من اینجا واسه یه جدول بنام customersدر بانکت و یه datasetبنام dataset1نوشتم:
private void InsertRows()
{
myConnection.Open();
foreach (DataRow row in dataSet1.Tables["Customers"].GetChanges().Rows)
{
myCommand.CommandText = "Insert into Customers (CustomerID,CompanyName,ContactName,ContactTitle) values ('" +
row[0] + "','" + row[1] + "','" + row[2] + "','" + row[3] + "')";
try
{
myCommand.ExecuteNonQuery();
}
catch (System.Exception Ex)
{ MessageBox.Show(Ex.Message); }
}
myConnection.Close();
}
حواست به constraintها و exceptionها باشه
getchangesسطرهایی از datasetرو برمیگردونه که تعییر کردند.خب مسلما میتونی کد رو مطابق با خواسته هات عوض کنی
موفق باشی
saeed-kh
پنج شنبه 03 اردیبهشت 1388, 17:49 عصر
در ضمن مسلما باید با دستورات SQL هم آشنایی داشته باشی.
چون با mycommandمیتونی از هر دستور SQL استفاده کنی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.