PDA

View Full Version : سوال: حذف و ویرایش رکورد در پایگاه داده از طریق dataset,dataAdapter



sarapepors
یک شنبه 04 مهر 1389, 09:59 صبح
سلام دوستان
من می دونم چطور با dataset,dataadapter توی رکورد رو به پایگه اضافه کنم اما نمیدونم چه جوری باید ویرایش و حذف رو از این طریق انجام بدم
اگه میشه کدش رو بنویسید
سپاسگزارم.

mehrsa_fr
یک شنبه 04 مهر 1389, 11:10 صبح
SqlDataAdapter ada = new SqlDataAdapter();
DataSet ds = new DataSet();
SqlCommandBuilder b = new SqlCommandBuilder(ada);
ada.InsertCommand = b.GetInsertCommand();
ada.DeleteCommand = b.GetDeleteCommand();
ada.UpdateCommand = b.GetUpdateCommand();
ada.Fill(ds);

بعدش برای ذخیره تغیراتم باید این کد بزنی


ada.Update(ds);

sarapepors
یک شنبه 04 مهر 1389, 12:00 عصر
SqlDataAdapter ada = newSqlDataAdapter();
DataSet ds = newDataSet();
SqlCommandBuilder b = newSqlCommandBuilder(ada);
ada.InsertCommand = b.GetInsertCommand();
ada.DeleteCommand = b.GetDeleteCommand();
ada.UpdateCommand = b.GetUpdateCommand();
ada.Fill(ds);

بعدش برای ذخیره تغیراتم باید این کد بزنی


ada.Update(ds);


من یه کم گیج شده خود command رو کجا باید بنویسم یعنی به عنوان مثال getinsertCommand دستور مربوط به insert رو از کجا باید بخونه؟؟

محسن شامحمدی
یک شنبه 04 مهر 1389, 12:16 عصر
خود command رو کجا باید بنویسم

ada.InsertCommand.commandtext="insert into a values(1,2,3,)

sarapepors
یک شنبه 04 مهر 1389, 13:18 عصر
میشه لطفا یه متد بنویسید که با استفاده از dataset,dataadapter رکوردی رو از پایگاه حذف کنه یه شرط این که id رکورد رو داشته باشیم.مرسی

mehrsa_fr
یک شنبه 04 مهر 1389, 14:45 عصر
اگه dataset به gridview متصل کنی و تغییرات خودتو تو gridview انجام بدی بعه dataset اپدیت کنی حذف یا اضافه تو دیتابیست انجام میشه

محسن شامحمدی
یک شنبه 04 مهر 1389, 15:04 عصر
میشه لطفا یه متد بنویسید که با استفاده از dataset,dataadapter رکوردی رو از پایگاه حذف کنه یه شرط این که id رکورد رو داشته باشیم.مرسی

البته در این کار نیازی به استفاده از dataset , dataadapter نیست به همین دلیل من این کار رو فقط با یک command و یک connection انجام می دم:

OleDbConnection cnn =new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mohsen\My Leitner\database.mdb")
OleDbCommand cmd=new OleDbCommand("",cnn);
int YourId ;
cnn.Open();
cmd.CommandText= "delete * from users where id=" & YourId;
cmd.ExecuteNonQuery();
cnn.Close;

mehrsa_fr
یک شنبه 04 مهر 1389, 15:09 عصر
البته در این کار نیازی به استفاده از dataset , dataadapter نیست به همین دلیل من این کار رو فقط با یک command و یک connection انجام می دم:

OleDbConnection cnn =new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mohsen\My Leitner\database.mdb")
OleDbCommand cmd=new OleDbCommand("",cnn);
int YourId ;
cnn.Open();
cmd.CommandText= "delete * from users where id=" & YourId;
cmd.ExecuteNonQuery();
cnn.Close;

یله البته اگه نخوان از sqldataadapter و dataset استفاده کرد

sarapepors
یک شنبه 04 مهر 1389, 15:26 عصر
من هم همین کاری رو که شما انجام می دین رو انجام می دم اما می خوام بدونم که با dataset , dataAdapter جوری می تونم انجام بدم راستش نمی دونم برای حذف و بروزرسانی چجوری باید از دیتا ست استفاده کنم خواهشا یه راهنمایی خوب بکنید مرسی مرسی

sarapepors
یک شنبه 04 مهر 1389, 16:14 عصر
SqlConnection con = new SqlConnection(constr);
SqlDataAdapter ada = new SqlDataAdapter("select * from tblstudent",con);
SqlCommandBuilder cb = new SqlCommandBuilder();
con.Open();
DataSet ds = new DataSet();
ada.DeleteCommand = new SqlCommand("delete from tblStudent where id =" + id);
ada.DeleteCommand = cb.GetDeleteCommand();
ada.Fill(ds, "tbl");
ada.DeleteCommand = cb.GetDeleteCommand();
ada.Update(ds, "tbl");
con.Close();

این کدیه که من نوشتم از دوستانی که اطلاعاتی راجع به این روش دارن خواهش دارم کمک کنید
متشکرم کد من جواب نمیده در حالی که هیچ خطایی هم نداره

صباح فتحی
یک شنبه 04 مهر 1389, 16:23 عصر
البته در این کار نیازی به استفاده از dataset , dataadapter نیست به همین دلیل من این کار رو فقط با یک command و یک connection انجام می دم:

OleDbConnection cnn =new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\mohsen\My Leitner\database.mdb")
OleDbCommand cmd=new OleDbCommand("",cnn);
int YourId ;
cnn.Open();
cmd.CommandText= "delete * from users where id=" & YourId;
cmd.ExecuteNonQuery();
cnn.Close;
مننم با روش این اقا موافقم ...خیلی هم اسونه

محسن شامحمدی
یک شنبه 04 مهر 1389, 18:57 عصر
ابتدا به شما پیشنهاد می کنم اول کمی بیشتر در مورد مفاهیم ado.net مطلب بخونید.


من هم همین کاری رو که شما انجام می دین رو انجام می دم اما می خوام بدونم که با dataset , dataAdapter جوری می تونم انجام بدم

ببینید dataset مکانی برای ذخیره اطلاعاته و اگر قرار باشه اطلاعاتی بر نگرده نیازی به dataset نیست!
کار data adapter ارتباط بین command ,connection ,database هست.
کار commmand وصل شدن به کانکشن و اجرای دستورات هستش.

ولی حالا چون خیلی به data adapter علاقه دارین :لبخندساده: این کد بدردتون می خوره


SqlConnection cnn = new SqlConnection(constring);
SqlDataAdapter da =new SqlDataAdapter( cmd );

da.DeleteCommand.CommandText = new SqlCommand("delete * from student where id=" + 22);
da.DeleteCommand.ExecuteNonQuery();



لابد الان شما می خواید بگید چرا از data set استفاده نکردم خب دلیلشو بالا گفتم:تشویق:

sarapepors
یک شنبه 04 مهر 1389, 20:36 عصر
مرسی از راهنماییتون من خودم راهشو پیدا کردم می دونم که راههای آسونتر وجو داره اما خوب من واقعا به این کد احتیاج داشتم اگه از دوستان کسی دوست داره میذارم که ببینید

محسن شامحمدی
یک شنبه 04 مهر 1389, 22:54 عصر
می شه این راه عجیب و خارق العاده تون رو به ما هم یاد بدید:قهقهه:

صباح فتحی
یک شنبه 04 مهر 1389, 23:39 عصر
می شه این راه عجیب و خارق العاده تون رو به ما هم یاد بدید:قهقهه:
یه چیزمیگم بهم نخندید..من تا حالا از data adapter واسه حذف -ویراش استفاده نکردم و نمیدونم اصلا بشه یانه:لبخند:

محسن شامحمدی
دوشنبه 05 مهر 1389, 09:48 صبح
من تا حالا از data adapter واسه حذف -ویراش استفاده نکردم و نمیدونم اصلا بشه یانه
من هم همینطور آخه وظیفه اصلی data adapter . فقط select کردن داده ها و ریختن اون ها توی dataset هستش.
و حذف و ویرایش و inset در دیتابیس فقط به command نیازه و data adapter کاربردی نداره

sarapepors
دوشنبه 05 مهر 1389, 11:17 صبح
[quote=09111111111;1109982]می شه این راه عجیب و خارق العاده تون رو به ما هم یاد بدید:قهقهه:


public void remove()
{
SqlConnection con = new SqlConnection(constr);
con.Open();
SqlDataAdapter ada = new SqlDataAdapter("Select * from tlbStudent where id ="+id, con);
DataSet ds = new DataSet();
SqlCommandBuilder cb = new SqlCommandBuilder(ada);
ada.Fill(ds, "tbl");
for (int i = 0;i<=ds.Tables["tbl"].Rows.Count-1;i++)
{
ds.Tables["tbl"].Rows[i].Delete();
}
ada.DeleteCommand = cb.GetDeleteCommand();
ada.Update(ds, "tbl");
con.Close();

}

البته تو این قسمت دیتا ست فقط یه رکورد داره اما بسته به این که شرط چی باشه می تونه رکوردهای بیشتری هم داشته باشه به همین خاطر من از حلقه استفاده کردم در ضمن من برای برنامه های خودم فقط زمانی که می خوام رکورد ها رو بخونم از dataset استفاده می کنم
اما یه چیز دیگه هم هست ببینید من تو این کد بلافاصله بعد از تغییرات توی دیتا بیس اون رو آپدیت کردم اما توی یه برنامه بزرگ که نمی خوایم در هر بار حذف به پایگاه مراجعه کنیم می تونیم هر بار فقط دیتا ست رو تغییر بدیم و با یه بار اپدیت کردن همه تغییرات رو به یکباره وارد پایگاه کنبم
البته هنوز همچین کدی ننوشتم خیلی مطمئن نیستم.

sarapepors
دوشنبه 05 مهر 1389, 11:25 صبح
من تو اینترنت زیاد گشتم کدهای زیادی هم دیدم که یه اداپتور رو توی یه متد طراحی کرده بودن و با retturn برگردوندنش البته اونها این مدلی که من نوشتم ننوشته بودن توی یه متد به خاصیتهای selectcomman,insertcomman,deletecomman,updatecomma nمربوط به ادابتور مقدار دادنو بعد هم برگردندنش .
اگه اداپتور برای حذف بروزرسانی استفاده نمیشه اصلا پس چرا یه همچین خاصیتهایی براش تعریف شده؟
اگه از دوستان کسی هست که از همین روش استفاده کرده منتها عمل حذف کردن رو با کوئری انجام داده میشه کد یا فایلشو بهم بدین

مرسی....

صباح فتحی
دوشنبه 05 مهر 1389, 11:31 صبح
اگه حرف من و دوستان یکم واستون مهمه از این روش پیچو پلوچ استفاده کنید ...خوبه خودتون توی دیتاآداپتر selectکردید...اگرم واقعابشه اصلا راه حل جالبی نیست.معذرت میخوام که بی ادبی کردم:خجالت:

محسن شامحمدی
دوشنبه 05 مهر 1389, 19:23 عصر
for (int i = 0;i<=ds.Tables["tbl"].Rows.Count-1;i++)
{
ds.Tables["tbl"].Rows[i].Delete();
}


این روش شما حتی در بهترین حالت بسیار کنده.
می دونید چرا
شما فرض کنید به جای 1 رکورد یا 2 تا می خواید 1000 رکورد از اون جدول رو پاک کنید اینطوری باید یک حلقه 1000 تایی اجرا کنید که بسیار برنامه رو کند می کنه.
-------------------------------

می تونیم هر بار فقط دیتا ست رو تغییر بدیم و با یه بار اپدیت کردن همه تغییرات رو به یکباره وارد پایگاه کنبم
خب به این فکر کردید که چند لحظه یکبار دیتابیس رو آپدیت کنید؟
خب حالا شما فرض کنید توی دیتاست کلی تغییرات دادید و می خواهید بعدا در دیتابیس هم اعمال بشه حالا اگر توی این فرصت برنامه بسته بشه یا برق بره سر اطلاعاتی که توی دیتاست بود چه بلایی میاد؟:شیطان:

Salah Sanjabian
دوشنبه 05 مهر 1389, 23:48 عصر
ببینید dataset مکانی برای ذخیره اطلاعاته و اگر قرار باشه اطلاعاتی بر نگرده نیازی به dataset نیست!
کار data adapter ارتباط بین command ,connection ,database هست.
کار commmand وصل شدن به کانکشن و اجرای دستورات هستش.


[/source]

دوست عزیز شماداری اشتباه می کنی.
اینجارو ببین
In traditional data acccess components, you made a connection to the database system
and then interacted with it through SQL queries using the connection

این روش(Dataset) برا برنامه هایی که تعاملات زیادی با دیتابیس صورت می گیره

فلسفه Dataset فقط پر کردن کنترل ها نیست.به این روش روش Disconected میگن ، یعنی همه کارات رو(مثلا 1000 تارکورد رو تو RAM اضافه کن بعد یه بار به دیتابیس متصل شو)
حسابش کن به جای یه بار 1000 بار به دیتابیس وصل و قطع بشی
فکر کنم از روش Dataset استفاده کنیم بهترباشه

تانظر دوستان چی باشه

محسن شامحمدی
سه شنبه 06 مهر 1389, 12:32 عصر
دوست عزیز شماداری اشتباه می کنی.
می شه بپرسم کدوم قسمتشو می گید؟!!!


dataset مکانی برای ذخیره اطلاعاته
مگه همینطور نیست؟!!!


اگر قرار باشه اطلاعاتی بر نگرده نیازی به dataset نیست!
درست نیست؟!!
مثلا در این دستور
delete * from users where username='0911111111'
آیا نیازی به دیتاست هست؟

Salah Sanjabian
سه شنبه 06 مهر 1389, 17:09 عصر
اگه قرار باشه فقط اطلاعات برگردونده بشه اصلا نمیخواد از Dataset استفاده کنی، شما میتونی از DataReader و DataTable استفاده کنی.Dataset رو برا خیلی کارای دیگه از ازش استفاده می کنیم.تغییرات رو تو RAM انجام بدیم و سپس Dataset رو آپدیت کنیم و سپس Acceptchange کنیم(وصل به دیتابیس شیم)
ساختار دیتابیست رو میتونی بااستفاده از Relation بیاری تو دیتاست

موفق باشی

محسن شامحمدی
سه شنبه 06 مهر 1389, 17:37 عصر
شما که سوال منو جواب ندادی .
من گفتم


در این دستور
delete * from users where username='0911111111'
آیا نیازی به دیتاست هست؟ در ضمن توضیحات شما مربوط به دیتاست رو خودم می دونم ولی شما دارین بحثو عوض می کنی و مفاهیم دیتاست رو به من آموزش می دی:گیج:
ببینید دوستمون برای اجرای این query
("delete * from student where id=" + 22
از دیتاست استفاده کرده بود که من بهشون گفتم اینجا چون اطلاعاتی برگردونده نمی شه نیازی هم به دیتاست نیست . اشتباه می کنم؟

sarapepors
سه شنبه 06 مهر 1389, 18:16 عصر
اگه قرار باشه فقط اطلاعات برگردونده بشه اصلا نمیخواد از Dataset استفاده کنی، شما میتونی از DataReader و DataTable استفاده کنی.Dataset رو برا خیلی کارای دیگه از ازش استفاده می کنیم.تغییرات رو تو RAM انجام بدیم و سپس Dataset رو آپدیت کنیم و سپس Acceptchange کنیم(وصل به دیتابیس شیم)
ساختار دیتابیست رو میتونی بااستفاده از Relation بیاری تو دیتاست

موفق باشی
میشه خواهش کنم که یه کد مثل همین که گفتین رو برام بذارین جناب 09111111111درست می گن نمیشه که برای حذف کردن یا ویرایش از حلقه استفاده کرد من می خوام این عملیات با کوئری انجام بشه اما نمیدونم چه جوری این کار رو انجام بدم یعنی نمی دونم اطلاعات وارد شده به دیتا ست رو چطور با استفاده از کوئری حذف کنم

public void Delete()
{
SqlConnection con = new SqlConnection(constr);
SqlDataAdapter ada = new SqlDataAdapter("select * from tlbStudent",con);
DataSet ds = new DataSet();
con.Open();
SqlCommandBuilder cb = new SqlCommandBuilder(ada);
ada.DeleteCommand = new SqlCommand("delete from tblStudent where id =" + id);
ada.DeleteCommand = cb.GetDeleteCommand();
ada.Fill(ds, "tbl");
ada.Update(ds, "tbl");
con.Close();
}

یه کد شبیه اینی که نوشتم
من مطمئنم یه همچین روشی هست

Salah Sanjabian
سه شنبه 06 مهر 1389, 21:50 عصر
میشه خواهش کنم که یه کد مثل همین که گفتین رو برام

دوست عزیز یه نمونه کد واستون گذاشتم.امیدوارم که مشکلتون رو حل کنه
فقط اسکریپت lms رو اجرا کنید که دیتابیس رو براتئن بسازه
ConnectionString رو براساس Server خودتون تنظیم کنید
هر جایی رو که مشکل داشتین میتونید بپرسید