PDA

View Full Version : سوال: فوري::::ارور عجيب در هنگام اينسرت داده به ديتابيس



navid1n2000
شنبه 03 بهمن 1388, 19:02 عصر
اين كد منه:


SqlConnection objConnection = new SqlConnection("Server=ASAD-2DB92FD23F;Database=VamDB;Integrated Security = True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "INSERT INTO Ghest (Id,ShOzviat, SalId, MahId, VztShkhs, MGhestSar, GhestVam,Asar) VALUES (@Id,@ShOzviat,@SalId,@MahId,@VztShkhs,@MGhestSar, @GhestVam,@Asar) ";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@Id", SHG);
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@ShOzviat", dataGridView1.Rows[i].Cells[0].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@SalId", dataGridView1.Rows[i].Cells[7].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@MahId", dataGridView1.Rows[i].Cells[3].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@VztShkhs", dataGridView1.Rows[i].Cells[2].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@MGhestSar", dataGridView1.Rows[i].Cells[4].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@GhestVam", dataGridView1.Rows[i].Cells[5].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@Asar", "1");
objDataAdapter.SelectCommand.ExecuteNonQuery();
objConnection.Close();

توي يك خط مانده به آخر اين ارور رو ميده:
http://up.iranblog.com/7/1264345363.jpg
دليل چيه؟؟؟؟

ali.aghdam
شنبه 03 بهمن 1388, 19:10 عصر
اگه اشتباه نکنم یکی از فیلدهات Identity هست که اونم باید id باشه اگه خودت می خای مقدار کلید اصلی رو وارد کنی این خاصیت رو از بانکت ،مربوط به اون فیلدت Off کن

CYCLOPS
شنبه 03 بهمن 1388, 19:11 عصر
زیاد ارور عجیبی نیست مشکل اینه که فیلد ID کلید اصلی جدولتونه

جسارتا چرا همیشه عجله دارید و کارتون فوریه ؟؟

این لیست تاپیک های ارسالی شماست :
http://barnamenevis.org/forum/search.php?searchid=2008609
نکته جالب اینکه با سرچ کلمه "فوری::::" میشه بیشتر تاپیک هاتون رو پیدا کرد :لبخندساده:

navid1n2000
شنبه 03 بهمن 1388, 19:24 عصر
زیاد ارور عجیبی نیست مشکل اینه که فیلد ID کلید اصلی جدولتونه

جسارتا چرا همیشه عجله دارید و کارتون فوریه ؟؟

این لیست تاپیک های ارسالی شماست :
http://barnamenevis.org/forum/search.php?searchid=2008609
نکته جالب اینکه با سرچ کلمه "فوری::::" میشه بیشتر تاپیک هاتون رو پیدا کرد :لبخندساده:
من مشكلم با شما نيست
اما شما ..................
شما نميدونين من كجا زندگي مي كنم
جايي كه حتي يك نفر هم بلد نيست ايرادامو بگه
اگر هم مزاحم شما شدم ببخشيد
به جاتي اين بحث هاي حاشيه اي اگه امكان داشته باشه كمك كنين كسايي رو از شما مي خوان ياد بگيرن
ممنون

ali.aghdam
شنبه 03 بهمن 1388, 19:41 عصر
خیلی سادست
ببینید شما در جدول تون فیلدID انتخاب کنید سپس از پنل culomn propertis زیر مجمو عه گزینه Identity specifiation (اگه اشتباه ننوشته باشم) رو باز کنید حالا یه گزینه دارد به نام (Is identity) حالا کافی اون رو برابر با نه "no" قرار بدید.همین

SamIran
شنبه 03 بهمن 1388, 19:45 عصر
سلام!
فکر کنم اگه فیلد ID را مقدار دهی نکنی حل بشه! اگرم نشد می تونی از کد زیر استفاده کنی(کلک مرغابی)

Private Sub P(ByVal S As Boolean)
If S Then
Dim p(0) As DataColumn
p(0) = DS.Tables("Main").Columns("ID")
DS.Tables("Main").PrimaryKey = p
Else
DS.Tables("Main").PrimaryKey = Nothing
DS.Tables("Main").Columns("ID").AllowDBNull = True
End If
End Subمن توی یه برنامه گیر کرده بودم چون ID کلید و Auto number بود. اگه خالی می گذاشتم خطا می گرفت که حق نداری خالی بگذاری! اگر پر می گذاشتم DB خطا می داد که Auto number هست! قبل از Insert فیلد را از کلید بودن در میاوردم و بعد از اینکه کارم تموم شد دوباره کلیدش می کردم. این کد VB هست معادل C#‎ اش را خودتان زحمتش را بکشید! البته برای مورد من شاید راه حل منطقی وجود داشت اما.....:لبخند:
موفق باشید

ali.aghdam
یک شنبه 04 بهمن 1388, 00:31 صبح
این کد منه:


SqlConnection objConnection = newSqlConnection("Server=ASAD-2DB92FD23F;Database=VamDB;Integrated Security = True");
SqlDataAdapter objDataAdapter = newSqlDataAdapter();
objDataAdapter.SelectCommand = newSqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "INSERT INTO Ghest (Id,ShOzviat, SalId, MahId, VztShkhs, MGhestSar, GhestVam,Asar) VALUES (@Id,@ShOzviat,@SalId,@MahId,@VztShkhs,@MGhestSar, @GhestVam,@Asar) ";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@Id", SHG);
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@ShOzviat", dataGridView1.Rows[i].Cells[0].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@SalId", dataGridView1.Rows[i].Cells[7].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@MahId", dataGridView1.Rows[i].Cells[3].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@VztShkhs", dataGridView1.Rows[i].Cells[2].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@MGhestSar", dataGridView1.Rows[i].Cells[4].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@GhestVam", dataGridView1.Rows[i].Cells[5].Value.ToString());
objDataAdapter.SelectCommand.Parameters.AddWithVal ue("@Asar", "1");
objDataAdapter.SelectCommand.ExecuteNonQuery();
objConnection.Close();
توی یک خط مانده به آخر این ارور رو میده:
http://up.iranblog.com/7/1264345363.jpg
دلیل چیه؟؟؟؟

آقای عزیز طبق این اروری که می ده راه حل همینیه که عرض کردم حالا شاید اون فیلد نبوده یه فیلد دیگه بوده
شما یه زحمت به خودت بده بقیرم چک کن جوابشو به ما بده.ok

CYCLOPS
یک شنبه 04 بهمن 1388, 05:17 صبح
من مشکلم با شما نیست
اما شما ..................
شما نمیدونین من کجا زندگی می کنم
جایی که حتی یک نفر هم بلد نیست ایرادامو بگه
اگر هم مزاحم شما شدم ببخشید
به جاتی این بحث های حاشیه ای اگه امکان داشته باشه کمک کنین کسایی رو از شما می خوان یاد بگیرن
ممنون

دوست عزيز منم با شما مشکلي ندارم فقط اون نکته (فوري::::) برام جالب بود همين . . .
قصد دلخور کردن شما رو هم نداشتم و اگر دلخور شديد عذر ميخوام

جواب سوالتون رو دوستان گفتند من يه نکته اضافه کنم :
زماني که فيلدي رو به عنوان کليد اصلي انتخاب ميکنيد و نوعش رو هم عدد ميذاريد ديگه نميتونيد در کوئري مستقيما مقدارش رو تو بانک بريزيد چون حالت Auto number پيدا ميکنه و DBMS خودش وظيفه مقدار دهي به اون رو به عهده ميگيره کافيه تو کوئريتون ID و @ID رو حذف کنيد و بقيه فيلدها رو پر کنيد اينطوري مشکل حل ميشه . . .
موفق باشيد

ali.aghdam
یک شنبه 04 بهمن 1388, 07:33 صبح
راستی بر اساس اصول مهندسی نرم افزار نباید فیلد کلیدتون Auto number باشه شما می تونید به جای اون از کد ملی یا همچین فیلد یکتای استفاده کنید.
پاینده باشید.