PDA

View Full Version : سوال: حذف اطلاعاتی خاص از پایگاه داده (ADO.NET)



OmMiD_MtWo
شنبه 03 آبان 1393, 14:09 عصر
سلام دوستان

از چه طریقی میتونم وقتی برنامه اطلاعات خاصی (مثلا برای تاریخی خاص) رو از پایگاه داده خوند و داخل دیتا گرید قرار داد، از داخل پایگاه داده همون اطلاعاتی رو حذف کنه که جلوی چشم کاربر هست و نه همه ی اطلاعاتی که با دستور حذف ما مطابقت دارند؟

RIG000
شنبه 03 آبان 1393, 14:11 عصر
متوجه نشدیم

OmMiD_MtWo
شنبه 03 آبان 1393, 14:21 عصر
دوست عزیز به عنوان مثال بنده یک Query برای جستجو روی پایگاه داده اجرا کرده ام که اطلاعاتی رو برمیگردونه که برای تاریخ خاصی به بعد میباشند و سپس نتیجه ی Query رو در DataGridView نمایش میدم. حالا هنگامی که کاربر مقدار خاصی برای حذف رو در TextBox وارد میکنه و سپس بر روی دکمه ی حذف کلیک میکنه، ممکنه چندین فیلد با همون مقداری که کاربر وارد کرده در پایگاه داده وجود داشته باشه ولی من قصد دارم فقط اطلاعاتی رو از پایگاه داده حذف کنه که خود کاربر هم در DataGridView در حال مشاهده ی اون اطلاعات است و نه همه ی فیلدهایی در پایگاه داده که با مقداری ورودی کاربر مطابقت دارند.

RIG000
شنبه 03 آبان 1393, 14:57 عصر
معمولا واسه اینکار خود رکورد گرید رو انتخاب میکنن و دکمه حذف فعال میشه و حذف انجام میگیره. دیگه واسه این مورد نمیان تکست باکس بذارن. تو عملا میخای کاربر با گرید کار کنه ....

RIG000
شنبه 03 آبان 1393, 15:08 عصر
private void button1_Click(object sender, EventArgs e) {
string delquery = "delete from Table1 where Id=" + dataGridView1.CurrentRow.Cells[0].Value.ToString();

OleDbConnection con = new OleDbConnection();
con.ConnectionString = strcon;
OleDbCommand cmd = new OleDbCommand(delquery, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Form1_Load(sender,e);
}
اینجوری نوشتم تا منظورمو برسونم. اینجوری بنویسی خیل بهتره .

OmMiD_MtWo
شنبه 03 آبان 1393, 15:22 عصر
دوست عزیز باز هم با این روشی که شما نوشتید، اگر اطلاعاتی در پایگاه داده وجود داشته باشه که با فیلد انتخابی DataGridView تطابق داشته باشه، اون هم حذف میشه. من قصد دارم حتی اگه چندین رکورد در پایگاه داده با مقداری که در DataGridView وجود داره، تطابق داشت؛ فقط همون رکوردی رو از پایگاه داده حذف کنه که در DataGridView مشاهده میشه.

RIG000
شنبه 03 آبان 1393, 15:36 عصر
یه سوال بپرسم؟
شما چطور بین دو رکورد تمایز قایل میشد؟!!!! به نظرتون میشه 100 رکورد یک جور داشت و شما برای هر کدوم یک ای دی نداشته باشی؟
اصولا اینجور میشه
نام و فامیلی یکی باشن .
تو 100 تا جان میکل داری. ایا این 100 تا همه ایدی هاشون 1 هستن ؟ یا 1 تا 100 هستن ؟

Mahmoud Zaad
شنبه 03 آبان 1393, 19:20 عصر
سلام
خیلی ساده، با یه حلقه اینکار انجام میشه. اول ردیفهای دیتا گرید ویو رو بررسی می کنید اگر ستون تاریخشون برابر با مقدار تکست باکس بود عملیات حذف انجام بشه، البته همونطور که دوستمون گفت حذف باید بر اساس id یونیک باشه یعنی شما باید id رو هم از دیتابیس بخونید:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
if(row.Cells["tarikh"].Value.ToString() ==textBox1.Text)
{
//delete
...

cmd.CommandText = "DELETE FROM tbl1 WHERE id=@id";

cmd.Parameters.AddWithValue("@id", row.Cells["id"].Value.ToString());
//...
}
}

RIG000
شنبه 03 آبان 1393, 20:58 عصر
اینم من می خاستم بذارم کلا" منصرف شده بودم.
اما میذارم.روش ها زیاده اما شما باید حتما یه ایدی منحصر به رکورد رو داشته باشی حالا هر جوری که هست. این کد هم میاد گرید رو جستجو میکنه و با تکست باکس مقایسه میکنه اگه بود که حذف میکنه اگه نه که هیچی.. چیزی نیست سادست.

private void button1_Click(object sender, EventArgs e) {
//string delquery = "delete from Table1 where Id=" + dataGridView1.CurrentRow.Cells[0].Value.ToString();
//OleDbConnection con = new OleDbConnection();
//con.ConnectionString = strcon;
//OleDbCommand cmd = new OleDbCommand(delquery, con);
//con.Open();
//cmd.ExecuteNonQuery();
//con.Close();
//Form1_Load(sender, e);
for (int i = 0; i < dataGridView1.Rows.Count-1;)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString()==textBox1.Text)
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = strcon;
string delquerywithtextbox = "delete from Table1 where Id=" + textBox1.Text;
OleDbCommand cmd = new OleDbCommand(delquerywithtextbox, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
Form1_Load(sender, e);
}
i++;
}


Form1_Load(sender,e);
}

alireza_g698
شنبه 03 آبان 1393, 21:08 عصر
سلام
وقتی شما دارین پایگاه داده رو طراحی میکنید در درون هر جدول یک ستونی دارید که یک آی دی منحصر به فرد داره.(identity culomns)حالا وقتی در دیتا گرید ویو نمایش میدهید هم ،همه ی رکورد ها یک آی دی مختصر به خودشون رو دارند.
وقتی میخواین حذف کنید باید باید اون آی دی را بگیرین و برای اون آی دی کد حذف بنویسید
مثلا
delete from Table where ID=@ID
که این جا @ID همون مقدار آی دی هست که به دیتابیس برای حذف میفرستید

OmMiD_MtWo
یک شنبه 04 آبان 1393, 08:54 صبح
دوستان ممنون از راهنمایی هایی که کردید، دقیقا اشتباه من اینجا بود که جدول مورد نظرم، یک آی دیِ منحصر به فرد نداشت. اگر به جدولم یک آی دیِ منحصر به فرد اضافه کنم به راحتی میتونم اون رکورد رو از پایگاه داده حذف کنم. حق با شماست دوستان، ممنون