PDA

View Full Version : سوال: چطور این خطا رو در vb.netبرطرف کنم؟



esyooo
دوشنبه 24 بهمن 1390, 04:58 صبح
سلام دوستان
برنامه ران میشه و مشکلی نداره ولی وقتی می خوام اطلاعات بهش بدم تا در دیتابیس قرار بگیره این پیغام رو به من میده.


error:invalid index 2 for this oledbparametercollection with count=2

http://up6.iranblog.com/images/03631148264065980314_thumb.jpg (http://up6.iranblog.com/viewer.php?file=03631148264065980314.jpg)
ممنون میشم راهنمایی کنید
با تشکر

Hybrid
دوشنبه 24 بهمن 1390, 08:11 صبح
سلام ،

اگه امکان داره عکسی از کدت رو بزار تا بهتر بتونیم راهنمایی کنیم.

esyooo
دوشنبه 24 بهمن 1390, 16:24 عصر
وقتی روی گزینه "درج"کلیک می کنیم این کد اجرا میشه

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
ErrorProvider1.Clear()
NilofarDataSet1.personel2.Clear()
personel_chek_code.SelectCommand.Parameters.Item(0 ).Value = Val(txtcodepersonal.Text)
personel_chek_code.Fill(NilofarDataSet1.personel2)
If (NilofarDataSet1.personel2.Rows.Count > 0) Or (txtcodepersonal.Text = "") Then
ErrorProvider1.SetError(txtcodepersonal, "کد پرسنلی نباید خالی یا تکراری باشد")
ElseIf txtfname.Text = "" Then
ErrorProvider1.SetError(txtfname, "نام را وارد کنید")
ElseIf txtlname.Text = "" Then
ErrorProvider1.SetError(txtlname, "نام خانوادگی را وارد کنید")
Else
OleDbDataAdapter1.InsertCommand.Parameters.Item(0) .Value = txtcodepersonal.Text
OleDbDataAdapter1.InsertCommand.Parameters.Item(1) .Value = txtfname.Text
OleDbDataAdapter1.InsertCommand.Parameters.Item(2) .Value = txtlname.Text
If OleDbConnection1.State = ConnectionState.Closed Then
OleDbConnection1.Open()
End If
OleDbDataAdapter1.InsertCommand.ExecuteNonQuery()
NilofarDataSet1.personel.Clear()
OleDbDataAdapter1.Fill(NilofarDataSet1.personel)
OleDbConnection1.Close()
txtcodepersonal.Clear()
txtfname.Clear()
txtlname.Clear()
MsgBox("اطلاعات پرسنل جدید با موفقیت به بانک اضافه شد")
End If
Catch ex As Exception
MsgBox("error:" & ex.Message)
End Try
End Sub

shadi khanum
دوشنبه 24 بهمن 1390, 20:37 عصر
جدولی که میخواید توش عملیات درج انجام بدید چند تا ستون داره؟ این error داره میگه که insertCommandتون فقط دو تا پارامتر داره و ایندکس 2 معنی نداره.. یعنی فقط دو تا پارامتر رو میتونه بگیره

esyooo
دوشنبه 24 بهمن 1390, 21:51 عصر
ممنون از توجه شما.
جدول من 3 تا ستون داره.
این هم از خود پروژه:

http://www.mediafire.com/?f4c57t7sqc133f6

Hybrid
دوشنبه 24 بهمن 1390, 21:56 عصر
سلام دوست عزیز ،

میدونین اشکال برنامتون کجاست : وقتی نوع یک فیلد autoNumber باشه همانند فیلد p_code در پروژتون دیگه نمیخوای بهش مقدار بدی!! دقت کن فیلد از نوع AutoNumber هست یعنی خودش به صورت اتوماتیک عدد تولید میکنه و دیگه شما لازم نیست مقدار دهی کنید پس اون Textbox سومی رو حذف کن و ایندکس های پارامترها رو یکی به عقب برگردون... یعنی اون پارامتری رو که مقدار p_code رو به بانک میفرسته رو حذف کن مثل قطعه کد زیر :

http://up98.org/upload/server1/01/a/4hn3dwtdcpf48slhyit.jpg

موفق باشید./

esyooo
دوشنبه 24 بهمن 1390, 22:01 عصر
بسیار بسیار ممنونم دوستان.خیلی لطف کردید.
من به اشتباه این طور تصحیح می کردم که نتیجه نمی گرفتم!


OleDbDataAdapter1.InsertCommand.Parameters.Item(1) .Value = txtfname.Text
OleDbDataAdapter1.InsertCommand.Parameters.Item(2) .Value = txtlname.Text

esyooo
دوشنبه 24 بهمن 1390, 22:14 عصر
کد جدید رو به این شکل تغییر دادم

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
ErrorProvider1.Clear()
NilofarDataSet1.personel2.Clear()
If txtfname.Text = "" Then
ErrorProvider1.SetError(txtfname, "نام را وارد کنید")
ElseIf txtlname.Text = "" Then
ErrorProvider1.SetError(txtlname, "نام خانوادگی را وارد کنید")
Else
OleDbDataAdapter1.InsertCommand.Parameters.Item(0) .Value = txtfname.Text
OleDbDataAdapter1.InsertCommand.Parameters.Item(1) .Value = txtlname.Text
If OleDbConnection1.State = ConnectionState.Closed Then
OleDbConnection1.Open()
End If
OleDbDataAdapter1.InsertCommand.ExecuteNonQuery()
NilofarDataSet1.personel.Clear()
OleDbDataAdapter1.Fill(NilofarDataSet1.personel)
OleDbConnection1.Close()
txtfname.Clear()
txtlname.Clear()
MsgBox("اطلاعات پرسنل جدید با موفقیت به بانک اضافه شد")
End If
Catch ex As Exception
MsgBox("error:" & ex.Message)
End Try
End Sub