PDA

View Full Version : ذخیره تغییرات dataset



safacon
چهارشنبه 07 مرداد 1388, 23:34 عصر
چطوری میشه تغییرات روی dataset رو (منظورم اظافه شدن یک ستون جدید) تو database ذخیره کرد؟
کسی میدونه؟

safacon
پنج شنبه 08 مرداد 1388, 18:10 عصر
کسی میدونه؟

shocraneh
جمعه 09 مرداد 1388, 22:16 عصر
اگه درست فهمیده باشم من هم سوالم همینه
من بعد از جستجو رکورد های خاصی رو در دیتاگرید نمایش می دم می خام کدی بنویسم
که ستون خاصی از این مجموعه رکورد آپدیت شه وبرابر یه تکس باکس قرار بگیره به نظر
دوستان بهترین شیوه کار چیه ؟
فکر کنم اگه بشه ds رو update کرد ...... یه جایی دیدم ولی من نتونستم انجامش بدم

safacon
جمعه 09 مرداد 1388, 22:20 عصر
ببین تغییر تو رکورد رو با sqlcommandbuilder میتونی ذخیره کنی(سرچ کن) اما اگه روی ستون تغییرات بدی ذخیره کردنش ممکنه یا نه رو نمیدونم که ببینم بچه ها میدونن یا نه!

Hossis
جمعه 09 مرداد 1388, 23:28 عصر
متاسفانه من در بانک اطلاعاتی از کانکشن استرینگ (adodb) استفاده می کنم و خیلی با دیتا ست کار نکردم ولی امتحان می کنم جوابشو می دم

shocraneh
شنبه 10 مرداد 1388, 07:53 صبح
فکر کنم دوستان منظور منو اشتباه متوجه شدن من که با update مشکل ندارم من می خام یه جوری باشه که تغییرات فقط روی رکورد های موجود در ds ذخیره باشه و اصلا مهم نیست که یه ستون یا همه ستون ها . البته با یه حلقه for و چند شرط امکان پذیره ولی خوب کار اضافه است من دنبال روش بهتریم

safacon
شنبه 10 مرداد 1388, 23:38 عصر
تغییر تو رکورد رو با sqlcommandbuilder میتونی ذخیره کنی به راحتی.

safacon
شنبه 10 مرداد 1388, 23:39 عصر
اما اگه روی ستون تغییرات بدی ذخیره کردنش ممکنه یا نه ؟ چطوری؟

mortezamhd
یک شنبه 11 مرداد 1388, 02:59 صبح
با سلام
من که گیج شدم :گیج: که شما میخواین چکار کنید
شما باید از update استفاده کنید
اگر یک پست بزنید که دقیقا میخواین چکار کنید و بهترههههه

safacon
دوشنبه 12 مرداد 1388, 19:45 عصر
من که هرچی سعی می کنم نمیتونم اطلاعا یک dataset رو که بدون استفاده از connect به پایگاه ساختم رو توی دیتا بیس ذخیره کنم.یا اینکه نمیتونم وقتی یک ستون به dataset اظافه کردم ،این تغییر رو تو دیتابیس ذخیره کنم!
چکار باید کرد؟

majid325
دوشنبه 12 مرداد 1388, 22:51 عصر
فکر کنم دوستان منظور منو اشتباه متوجه شدن من که با update مشکل ندارم من می خام یه جوری باشه که تغییرات فقط روی رکورد های موجود در ds ذخیره باشه و اصلا مهم نیست که یه ستون یا همه ستون ها .

ds.AcceptChanges();




البته با یه حلقه for و چند شرط امکان پذیره ولی خوب کار اضافه است من دنبال روش بهتریم
منظورتون دقیقا چی هست؟

majid325
دوشنبه 12 مرداد 1388, 22:59 عصر
اگه درست فهمیده باشم من هم سوالم همینه
من بعد از جستجو رکورد های خاصی رو در دیتاگرید نمایش می دم می خام کدی بنویسم
که ستون خاصی از این مجموعه رکورد آپدیت شه وبرابر یه تکس باکس قرار بگیره به نظر
دوستان بهترین شیوه کار چیه ؟
فکر کنم اگه بشه ds رو update کرد ...... یه جایی دیدم ولی من نتونستم انجامش بدم

شما باید از متد update شی Adapter تون استفاده کنید:


DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd=new SqlCommand("UPDATE Contacts SET Contacts.ContactID = 'ValueID', Contacts.FirstName = 'ValueName', Contacts.LastName = 'ValueLast' Where ContactID='Test' ;",MyCnn)
da.UpdateCommand=cmd;
da.Update(ds);

safacon
سه شنبه 13 مرداد 1388, 20:44 عصر
اصلا این کار امکان داره؟

safacon
سه شنبه 13 مرداد 1388, 20:45 عصر
این کار امکان داره؟

safacon
سه شنبه 13 مرداد 1388, 20:49 عصر
من که هرچی سعی می کنم نمیتونم اطلاعا یک dataset رو که بدون استفاده از connect به پایگاه ساختم رو توی دیتا بیس ذخیره کنم.یا اینکه نمیتونم وقتی یک ستون به dataset اظافه کردم ،این تغییر رو تو دیتابیس ذخیره کنم!
چکار باید کرد؟
این کار امکان داره؟

safacon
چهارشنبه 14 مرداد 1388, 20:33 عصر
بابا یکی بگه این کار امکان داره؟

majid325
چهارشنبه 14 مرداد 1388, 23:23 عصر
من که هرچی سعی می کنم نمیتونم اطلاعا یک dataset رو که بدون استفاده از connect به پایگاه ساختم رو توی دیتا بیس ذخیره کنم.این کار امکان داره؟

بدون کانکشن امکان نداره.


یا اینکه نمیتونم وقتی یک ستون به dataset اظافه کردم ،این تغییر رو تو دیتابیس ذخیره کنم!
چکار باید کرد؟


امکانش هست ، ولی باید قبلش یه command که محتوای دستورات ایجاد فیلد جدید تو table هست رو اجرا کنی.(دستورات sql هم توبخشsql هست)

elham366
پنج شنبه 15 مرداد 1388, 11:26 صبح
سلام
اگه منظورتون رو درست متوجه شده باشم باید بگم که من هم مشکل شما رو داشتم از یکی از اساتید پرسیدم مشکلم رفع شد...البته پایگاه داده من اکسسه ولی میدونم که تو sql هم همچین چیزی هست...
وقتی یه جدول رو به دیتاست اضافه میکنی،همزمان یه tableAdapter مخصوص به همون جدول بوجود میاد که کار update رو انجام میده، نگاه کن:


this.dstPub.Titles.Rows.Add(null, txtName.Text, txtAuthor.Text, Convert.ToInt16(comboCat.SelectedValue), Convert.ToInt64(txtPrice.Text), txtPub.Text, DateTimeString);
titlesTableAdapter1.Update(this.dstPub.Titles);



اسم جدولم Titles هست،کد خط آخر کار update رو انجام میده...
اینکه مال add کردنه ، حالا اگه داری با gridview و از این چیزا کار میکنی ، توی event کلیک دکمه ای که مثلا برای ذخیره اطلاعات گذاشتی میتونی کد خط آخر رو بنویسی...
اینجوری اصلا احتیاجی به command و DataAdapter نیست

safacon
جمعه 16 مرداد 1388, 20:55 عصر
از هر دو عزیز ممنونم.
majid325 کدت بیشتر کمکم میکنه.
elham366 اگه اشتباه نکنم شما یک row جدید اظافه کردی ولی من منظورم یک column جدیده!
منتظر نظراتتون هستم.

majid325
شنبه 17 مرداد 1388, 03:55 صبح
از هر دو عزیز ممنونم.
majid325 کدت بیشتر کمکم میکنه.
elham366 اگه اشتباه نکنم شما یک row جدید اظافه کردی ولی من منظورم یک column جدیده!
منتظر نظراتتون هستم.

ببنید شما باید با اجزای ado تو دات نت آشنا بشید که کار یکی و دوتا پست نیست.
فقط به یه سری توضیحات اکتفا میکنم:
برای هر گونه تغییری در دیتابیس (چه تغییر داد ها چه تغییر ساختار دیتابیس) نیاز به اجرای دستورات مختص اون دیتابیس هست (مثلا در ms sql باید دستورات t_sql اجرا بشه)
برای اجرای هر دستوری در بانک اطلاعاتی باید یک شی command داشت(مثلا sqlComman)
برای اجرای هر command اول باید با شی Connectionیک کانکشن به بانک ایجاد کرد(مثل sqlConnection)

برای نگهداری رکوردهای فراخوانی شده از بانک باید یک شی مختص این کار داشت (مثل dataset)

حالا ابجکتهای دیگه هم هستند که در سناریو های مختلف به ما بیشتر کمک میکنند.
در رابطه با توضیحات elham366 هم باید بگم که چون از wizard استفاده کردند خود vs کدهای مربوطه را براشون ایجاد کرده.

در رابطه با ایجاد کردن ستون یا فیلد جدید در جدول از طریق کد ،پیشنهاد میکنم سعی کنید سناریتون رو جوری تغییر بدین که نیازی به اضافه کردن فیلد از طریق کد نباشه ، در هر صورت شما باید برای تغییر در ساختار جدول باید تغییر مورد نظر رو تشخیص بدین و در غالب یک کد sql با شی command تغییرات رو پیاده کنید.

برای تغییر در ساختار جدول باید در زبان t_sql از کلمه کلیدی Alter table استفاده کنید.

منصور بزرگمهر
شنبه 17 مرداد 1388, 20:56 عصر
برای ذخیره کردن اطلاعات داخل دیتا ست باید از طریق TableAdapter اقدام کنی. تو با این شی دیتا ست خود را Fill کردی، حال با همین شی می توانی دیتا ست خود را ذخیره کنی.
برای ذخیره اطلاعات باید از متد Update شی TableAdapter استفاده کنی، که یک دیتا ست با جدول یاد شده، بعنوان آرگومان می خواهد. به مثال زیر توجه کن:


Me.OrderDetailTableAdapter.Update(Me.OrdersDataSet .OrderDetail)در مثال فوق OrderDetailTableAdapter یک TableAdaper است(که ممکن است یک کومپننت روی فرم باشد، یا یک متغیر در سطح کد)، متد Update آنرا استفاده، و آرگومان OrdersDataSet.OrderDetail استفاده می کند، که آرگومان فوق یک دیتا ست با جدول ان است(که می تواند این دیتا ست یک کومپننت روی فرم، یا یک متغیر در سطح کد باشد - نام جدول، زمانی به متدهای دیتا ست تو اضافه می شود که، بیش از یک جدول در دیتا ست خود داشته باشی، یا از کومپننت فرم استفاده کرده باشی، در غیر اینصورت باید نام جدول خود را داخل پرانتز () در وی بی یا داخل کروشه در سی شارپ [] بصورت متغیر متنی تعریف کنی. یعنی دیتا ست فوق و جدول فوق انرا نیز بشکل زیر می توانی بنویسی)

Me.OrdersDataSet("OrderDetail")این کد در وی بی کار می کند، و در سی شارپ داخل کروشه بگذار.

safacon
دوشنبه 19 مرداد 1388, 20:14 عصر
سلام
من اولین باره که tableadapter رو میشنوم و تو هیچ کتابی ندیدم و نتونستم اونو تو vb.net 2008 پیدا کنم.میشه در مورد این شی بیشتر توضیح بدید؟

منصور بزرگمهر
دوشنبه 19 مرداد 1388, 21:55 عصر
جناب safacon (http://barnamenevis.org/forum/member.php?u=108761) چگونه اطلاعات خود را در DataSet تو Fill می کنی، همان شی اما
به صفحه دوم تاپیک majid325 (http://barnamenevis.org/forum/member.php?u=18075) برو توضیح بیشتری داده است، ولی
روشی که majid325 (http://barnamenevis.org/forum/member.php?u=18075) گفته منطقاً باید درست باشد، ولی کار نمی کند، و من این را شخصاً از majid325 (http://barnamenevis.org/forum/member.php?u=18075) همین جا خواهم پرسید.
جناب majid325 (http://barnamenevis.org/forum/member.php?u=18075) من حتی یک کانکشن باز برای tableAdapter خود استفاده کردم، ولی باز ذخیره نکرد. دلیل چیست؟ استرینگ UpDate درست است امتحانش کردم، ولی UpDate نمی کند.

حتی در MSDN از روش UpDate شی()SqlCommand.ExecuteNonQuery پیشنهاد می کند و مثالی در این زمینه ندارد.

majid325
سه شنبه 20 مرداد 1388, 16:41 عصر
جناب majid325 (http://barnamenevis.org/forum/member.php?u=18075) من حتی یک کانکشن باز برای tableAdapter خود استفاده کردم، ولی باز ذخیره نکرد. دلیل چیست؟ استرینگ UpDate درست است امتحانش کردم، ولی UpDate نمی کند.


من در رابطه با متد پروژه شما بی اطلاع هستم ، بعضی مواقع همه چیز درسته ولی ترتیب عملکرد اشتباه!
(در زمان کار با Adapter نیاز به باز و بستن cnn نداریم)


حتی در MSDN از روش UpDate شی()SqlCommand.ExecuteNonQuery پیشنهاد می کند و مثالی در این زمینه ندارد.


Cnn.Open();
Cmd.CommandText = sql;
Cmd.ExecuteNonQuery();

حالا اگه گیر این قضیه هستی میتونی پروژه رو اینجا بزاری نگاهش کنم .


سلام
من اولین باره که tableadapter رو میشنوم و تو هیچ کتابی ندیدم و نتونستم اونو تو vb.net 2008 پیدا کنم.میشه در مورد این شی بیشتر توضیح بدید؟

http://msdn.microsoft.com/en-us/library/bz9tthwx(VS.80).aspx