PDA

View Full Version : ویرایش داده ها



مهدی رحیم زاده
پنج شنبه 26 بهمن 1385, 19:39 عصر
سلام
می خواستم بدونم که چطوری میشه داده های یک بانک رو ویرایش کرد و بعد این تغییرات رو روی بانک اعمال کرد .
من برای این کار اول اومدم و با دستور select یک داده خاص رو از بانک انتخاب کردم . بعد تغییرات روش اعمال کردم ، در نهایت از دستور Update استفاده کردم . اما تغییرات اعمال نشد .
نمی دونم شاید اشکال از نحوه کد نویسی من بوده یا شایدم چیز دیگه ای ....
در هر صورت اگر میشه یه کدی بنویسید که کار ویرایش یه داده خاص رو انجام میده ...
ممنونم ...

omid_Ahmadi
پنج شنبه 26 بهمن 1385, 20:04 عصر
روش کار همینه، یعنی اول داده های مورد نظر رو با DataAdapter، Connection و غیره وارد یه DataSet می کنید، بعد از تغییرات مورد نظر، با استفاده از متد Update می تونید تغییرات رو ذخیره کنید.
ممکنه کد شما مشکلی داشته باشه، مثلا یکی از عمده ترین مشکلات استفاده از متد AcceptChanges قبل از ذخیره داده هاست، اما باز هم تا کد نباشه نمیشه تشخیص داد. اگر فکر می کنید که هیچ مشکلی نداره کد رو اینجا قرار بدید. البته فقط لطفا کد تا جایی که ممکنه خلاصه باشه.

مهدی رحیم زاده
پنج شنبه 26 بهمن 1385, 21:29 عصر
خوب دوست من
من با این کد کانکشن رو ایجاد کردم ، دیتا ادبپتر رو پر کرده و textbox ها رو به فیلد ها ربط دادم تا بتونن داده ها رو نشون بدن و در نهایت کانکشن رو بستم .

connect.Open();
da = new OleDbDataAdapter("select * from Simcard where khamrah='" + toolStripTextBox1.Text + "'",connect);
da.Fill(ds, "Simcard");
textBox1.DataBindings.Add(new Binding("text",ds,"Simcard.khamrah"));
textBox2.DataBindings.Add(new Binding("text", ds, "Simcard.froshandeh"));
connect.Close();
البته قبلا اینا رو هم اینجوری تعریف کردم :

OleDbConnection connect = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Mobile_p\\Mobile_B.mdb");
DataSet ds = new DataSet();
OleDbCommandBuilder cb;
OleDbDataAdapter da;
و برای دکمه save این کد رو نوشتم :

cb = new OleDbCommandBuilder(da);
da.Update(ds, "Simcard");
اما داده ها توی بانک ذخیره نمیشن ...
حالا اگر میشه منو راهنمایی کنید که مشکلمو زود حل کنم ...
ممنون

مهدی رحیم زاده
پنج شنبه 26 بهمن 1385, 21:32 عصر
در ضمن یادم رفت اینو هم بگم که من با C# 2005 کار می کنم .

omid_Ahmadi
جمعه 27 بهمن 1385, 07:44 صبح
اولا که بعد از تنظیم CommandBuilder، باید با Call کردن متدهای GetDeleteCommand، GetInsertCommand و ... Commandهای مورد نظر رو بدست بیاری و داخل DataAdapter قرار بدی. بعد به این صورت که استفاده کردی می تونی این آبجکتها رو به کار ببری.
دوما، بایندینگ مشکل داره، باید در پارامتر دوم بایندینگ Table رو مشخص کنی، نه DataSet رو، برای پارامتر سوم هم فقط نام ستون رو بنویسی

مهدی رحیم زاده
جمعه 27 بهمن 1385, 09:13 صبح
میشه کدش رو کامل برام بنویسی ...
ممنون میشم اگر این کار رو بکنی ...

omid_Ahmadi
جمعه 27 بهمن 1385, 11:51 صبح
بایندینگ باید به صورت زیر تغییر کنه:


textBox1.DataBindings.Add(new Binding("Text", ds.Tables[0], "ColumnName"));
textBox2.DataBindings.Add(new Binding("Text", ds.Tables[0], "ColumnName1"));
از CommandBuilder هم باید مشابه زیر استفاده کنی:


da.InsertCommand = cb.GetInsertCommand();
da.UpdateCommand = cb.GetUpdateCommand();
da.DeleteCommand = cb.GetDeleteCommand();

مهدی رحیم زاده
یک شنبه 29 بهمن 1385, 22:06 عصر
سلام دوستان عزیز
مشکل این کد چیه که سینتکس ارور میده در مورد دستور insert

private DataTable setdata(string command)
{
OleDbDataAdapter da = new OleDbDataAdapter(command, connect);
DataTable dt = new DataTable();
object[] obj = new object[10];
da.Fill(dt);
dt.Rows.Add(obj);
da.InsertCommand = new OleDbCommand("insert into Simcard (froshandeh,kharidar,khamrah,address froshandeh," +
"address kharidar,mablagh kharid,mablagh frosh,date sanad,tarikh_kharid,tarikh_foroosh) VALUES ('" + textBox2.Text + "','" +
textBox3.Text + "'," + textBox1.Text + ",'" + textBox7.Text + "','" + textBox8.Text + "'," + textBox4.Text + "," + textBox5.Text + ",'" +
textBox6.Text + "','" + textBox9.Text + "','" + textBox10.Text + "')",connect);
da.Update(dt);
return dt;
}

PC2st
یک شنبه 29 بهمن 1385, 23:22 عصر
اگر نام فیلدهای یک جدول، بیش از یک کلمه بود، مثلا address froshandeh یا mablagh frosh یا date sanad در جدول شما. باید نام آنها را داخل ] و [ قرار داد، مثل زیر:



da.InsertCommand = newOleDbCommand("insert into Simcard (froshandeh,kharidar,khamrah,[address froshandeh]," +
"[address kharidar],[mablagh kharid],[mablagh frosh],[date sanad],tarikh_kharid,tarikh_foroosh) VALUES ('" + textBox2.Text + "','" +
textBox3.Text + "'," + textBox1.Text + ",'" + textBox7.Text + "','" + textBox8.Text + "'," + textBox4.Text + "," + textBox5.Text + ",'" +
textBox6.Text + "','" + textBox9.Text + "','" + textBox10.Text + "')", connect);

M * M * A
پنج شنبه 28 تیر 1386, 15:40 عصر
اگر نام فیلدهای یک جدول، بیش از یک کلمه بود، مثلا address froshandeh یا mablagh frosh یا date sanad در جدول شما. باید نام آنها را داخل ] و [ قرار داد، مثل زیر:



da.InsertCommand = newOleDbCommand("insert into Simcard (froshandeh,kharidar,khamrah,[address froshandeh]," +
"[address kharidar],[mablagh kharid],[mablagh frosh],[date sanad],tarikh_kharid,tarikh_foroosh) VALUES ('" + textBox2.Text + "','" +
textBox3.Text + "'," + textBox1.Text + ",'" + textBox7.Text + "','" + textBox8.Text + "'," + textBox4.Text + "," + textBox5.Text + ",'" +
textBox6.Text + "','" + textBox9.Text + "','" + textBox10.Text + "')", connect);


ایا میشه بجای insert از update استفاده کزد؟
چه جوری می توان اطلاعات را ویرایش کرد . با استفاده از این دستورها

PC2st
پنج شنبه 28 تیر 1386, 22:48 عصر
سینتکس دستور UPDATE:


UPDATE tableName SET field1 = newValue1, field2 = newValue2 WHERE field3 = value3

دستور فوق، رکوردی که مقدار field3 آن برابر value3 باشد رو تغییر میده بطوریکه که مقدار field1 برابر value1 باشه و ...، این تغییر در جدول tableName صورت میگیره.

دستورات SQL رو در خاصیت CommandText قرار بدید و connection رو open کرده و متد ExecuteNonQuary رو اجرا کنید و بعدش connection رو close کنید.