PDA

View Full Version : مشکل در حذف و ویرایش و ثبت در datagridview و sqlserver 2014



pure_love
یک شنبه 21 شهریور 1395, 08:16 صبح
بچه ها من دارم برنامه حسابداری مینویسم الان به یه مشکلی بر خوردم.!
ببینید برنامه من اینجوریه که باید دوتا عدد "کارکرد" و "خرید" رو درون یک گرید ویو که به دیتابیس sqlserver2014 وصل شده ثبت کنه!همه چی وصل شده و مشکلی در ثبت و ویرایش و حذف نداره!
مشکل من اینجاست که کد هام که نوشتم روی تکست باکس اول یعنی کارکرد تنظیم شده! یعنی مثلا بخام فقط یه سطر از گرید ویو حذف کنم ، برنامه من همه سطر هایی که کارکرد 1000 تومان هست حذف میکنه یا مثلا بخام ویرایش کنم کارکرد ویرایش نمیکنه و فقط خرید ویرایش میکنه !
کد ثبت کارکرد و خریدم :

SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=Cferdoosi;Integrated Security=True");

M.Open();

String s1 = string.Format("insert into karkardkharid values({0},{1})", textBox1.Text, textBox2.Text);

SqlCommand comm = new SqlCommand(s1, M);

comm.ExecuteNonQuery();

MessageBox.Show(" ثبت شد");

String s2 = string.Format("SELECT * from karkardkharid");

SqlCommand comm2 = new SqlCommand(s2, M);

SqlDataAdapter adap = new SqlDataAdapter(comm2);

DataTable dt = new DataTable();

adap.Fill(dt);
dataGridView1.DataSource = dt;


کد حذفم :

tring strusername = dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[0].Value.ToString();
string conn = (@"Data Source=.;Initial Catalog=Cferdoosi;Integrated Security=True");
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();
SqlCommand objcmd = new SqlCommand("Delete from karkardkharid Where karkard='" + int.Parse(strusername) + "'", objsqlconn);
objcmd.ExecuteNonQuery();
MessageBox.Show("اطلاعات مورد نظر از لیست حذف گردید", "تاییدیه", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
SqlConnection con1 = new SqlConnection(@"Data Source=.;Initial Catalog=Cferdoosi;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("select * from karkardkharid", con1);
DataTable dt = new DataTable();
con1.Open();
da.Fill(dt);
con1.Close();
dataGridView1.DataSource = dt;


کد ویرایشم :

string conn = (@"Data Source=.;Initial Catalog=Cferdoosi;Integrated Security=True");
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();
SqlCommand objcmd = new SqlCommand("Update karkardkharid set karkard=@karkard , kharid=@kharid where karkard= '" + int.Parse(textBox1.Text) + "'", objsqlconn);
objcmd.Parameters.AddWithValue("@karkard", textBox1.Text);
objcmd.Parameters.AddWithValue("@kharid", textBox2.Text);
objcmd.ExecuteNonQuery();
MessageBox.Show("اطلاعات شما با موفقیت ویرایش شد", "تاییدیه", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
SqlConnection con1 = new SqlConnection(@"Data Source=.;Initial Catalog=Cferdoosi;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("select * from karkardkharid", con1);
DataTable dt = new DataTable();
con1.Open();
da.Fill(dt);
con1.Close();
dataGridView1.DataSource = dt;


چند جا سوال کردم گفتم جوری گرید ویو تنطیم کن که وقتی ثبت میکنی خودش یه ستون هربار درست کنه ( 1 و 2 و 3 و.... ) بعد طبق این حذف و ویرایش کن!ولی اینم بلد نبودم چجوریه کدش چیه و چیکار کنم به هم وصل بشن.
نمیدونم فهمیدین مشکلم چیه یا نه ! اگه سوالی دارین بپرسین بیشتر توضیح بدم!
منتظر بچه ها لطفا جواب بدین خیلی نیاز دارم کارم گیره
تشکر

barnamenevisjavan
یک شنبه 21 شهریور 1395, 10:53 صبح
سلام بنظر میرسه مشکل مربوط به شرط where توی کوئری های حذف و ویرایش هستش شما توی شرط گفتین Delete from karkardkharid Where karkard='" + int.Parse(strusername) خوب حالا هرچندتا کارکرد 1000 باشه همش حذف میشه.شرطتون رو باید اصلاح کنید و بر اساس ایدی یا مولفه های دیگه بنویسید

pure_love
یک شنبه 21 شهریور 1395, 11:36 صبح
سلام بنظر میرسه مشکل مربوط به شرط where توی کوئری های حذف و ویرایش هستش شما توی شرط گفتین Delete from karkardkharid Where karkard='" + int.Parse(strusername) خوب حالا هرچندتا کارکرد 1000 باشه همش حذف میشه.شرطتون رو باید اصلاح کنید و بر اساس ایدی یا مولفه های دیگه بنویسید

خب چی بزارم عزیز
آگه میشه راهنمایی کنید درستش کنم

daniyaltjm
یک شنبه 21 شهریور 1395, 14:02 عصر
مشکل توی شرط هست که اصلا قرار ندادین مثلا برای حذف یک رکورد باید بهش بگید که کدوم رکود رو حذف کنه وگرنه همه رکورد هایی که برابر
karkard='" + int.Parse(strusername) + "'"
هست رو حذف میکنه برای بقیه موارد هم همین طور شما توی جدولت باید یک فیلد کلید اصلی داشته باشی که منحصر به فرد باشه و بر اساس اون شرط بزارید توی برنامه مثلا:

SqlCommand objcmd = new SqlCommand("Delete from karkardkharid Where karkard='" + int.Parse(strusername) + "' and id='"+id+"'", objsqlconn);


id همون کلید اصلی هست

و '"+id+"'" یک متغییر از نوع int هست که مقدار کلید اصلی جدولت رو فرض می کنیم ریختی داخلش.

pure_love
یک شنبه 21 شهریور 1395, 19:15 عصر
مشکل توی شرط هست که اصلا قرار ندادین مثلا برای حذف یک رکورد باید بهش بگید که کدوم رکود رو حذف کنه وگرنه همه رکورد هایی که برابر
karkard='" + int.Parse(strusername) + "'"
هست رو حذف میکنه برای بقیه موارد هم همین طور شما توی جدولت باید یک فیلد کلید اصلی داشته باشی که منحصر به فرد باشه و بر اساس اون شرط بزارید توی برنامه مثلا:

SqlCommand objcmd = new SqlCommand("Delete from karkardkharid Where karkard='" + int.Parse(strusername) + "' and id='"+id+"'", objsqlconn);


id همون کلید اصلی هست

و '"+id+"'" یک متغییر از نوع int هست که مقدار کلید اصلی جدولت رو فرض می کنیم ریختی داخلش.

یه ستون در پایگاه داده ایجاد کردم مقدار int که ID رو مشخص کنه.
حالا میخوام بطور اتوماتیک خودش عدد بزاره و افزایش پیدا کنه
کدش رو میخواستم.ممنون

pure_love
یک شنبه 21 شهریور 1395, 23:42 عصر
بچه ها کسی نبود جواب بده خیلی لازم دارم
تشکر

12457812
دوشنبه 22 شهریور 1395, 00:16 صبح
وقتی یه فیلد اکی میکنی دیگه خودش عدد میندازه روش
مثلا الان Id ساختی و میخوای هر بار یه رکورد اضافه کردی خودکار 1.2.3 بده؟
رو ای دی کلیک کن و اون پایین ای دنتی رو برابر با یس کن موفق باشی
بعدا یه چیزی کدی ک نوشتی تو قسمت شرطی میاد هر رکوردی که مثلا به عنوان مثال (اگه شرط رو نام باشه) تمامی نام هایی که علی باشه رو ویرایش یا پاک میکنه
سعی کن شرط رو چیزی بزاری که همیشه یه عدد تک باشه و شبیه اون تو فیلد ها نباشه مثل کد فاکتور

pure_love
دوشنبه 22 شهریور 1395, 13:15 عصر
وقتی یه فیلد اکی میکنی دیگه خودش عدد میندازه روش
مثلا الان Id ساختی و میخوای هر بار یه رکورد اضافه کردی خودکار 1.2.3 بده؟
رو ای دی کلیک کن و اون پایین ای دنتی رو برابر با یس کن موفق باشی
بعدا یه چیزی کدی ک نوشتی تو قسمت شرطی میاد هر رکوردی که مثلا به عنوان مثال (اگه شرط رو نام باشه) تمامی نام هایی که علی باشه رو ویرایش یا پاک میکنه
سعی کن شرط رو چیزی بزاری که همیشه یه عدد تک باشه و شبیه اون تو فیلد ها نباشه مثل کد فاکتور

مرسی دوست عزیز مشکلم حل شد!ولی یه مشکل جدید دارم.
ببینید این برنامه منه :
142522
اون قسمت پایینی چیزی نیست! قست بالا وقتی رو دکمه ثبت میزنی مقدار تکست باکس 1 و 2 درون دیتابیس میریزه که بعد تو دیتاگرید ویو پایین نشان میده!که با رهنمایی شما اون id و شمارنده اتوماتیک اوکی شد!ولی نگاه کد های ثبت من کنید :

SqlConnection M = new SqlConnection("Data Source=.;Initial Catalog=Cferdoosi;Integrated Security=True");

M.Open();


String s1 = string.Format("insert into karkardkharid values({0},{1})", textBox1.Text, textBox2.Text);



SqlCommand comm = new SqlCommand(s1, M);


comm.ExecuteNonQuery();

MessageBox.Show(" ثبت شد");

String s2 = string.Format("SELECT * from karkardkharid");

SqlCommand comm2 = new SqlCommand(s2, M);

SqlDataAdapter adap = new SqlDataAdapter(comm2);

DataTable dt = new DataTable();

adap.Fill(dt);
dataGridView1.DataSource = dt;




اونجا که با رنگ سبز مشخص کردم جوری ثبت میکنه که تکست باکس 1 میریزه تو مقدار اول و تکست باکس 2 میریزه تو مقدار دوم دیتابیس!ولی من الان به دیتابیسم یه قسمت id هم اضافه کردم :
142523
طبق کد های من تکست باکس 1 میریزه تو مقدار اول که حالا id شده!!! میدونید منظورم چیه؟ که پیغام زیر میده :
142524

لطفا بگید چیکارش کنم درست شه ؟
مرسی

mrprestige
دوشنبه 22 شهریور 1395, 17:39 عصر
سلام دوست من ، خب مسلمه همچین خطایی رو میده چون شما برای id ورودی تعیین نکردید ، و اصلا این روش ثبت تون اصولی نیست و اینکه اگه نمیخواید مقدار id رو بطور دستی مقدار دهی کنید اون رو AutoNumber قرار بدید یا اگه برعکس اگه میخواید تو.ی ورودی هاتون ذکر بشه به این صورت بنویسید

var comm = new SqlCommand("insert into karkardkharid (id , karkard,kharid) values (@id,@karkard,@kharid)", M);
comm.Parameters.Add("@id",Convert.Toint32(Textbox1.text));
comm.Parameters.Add("@karkard",Textbox2.text);
comm.Parameters.Add("@kharid",Textbox3.text);
comm.ExecuteNonQuery();