PDA

View Full Version : Object reference not set to an instance



sheida-peyravi
پنج شنبه 31 مرداد 1387, 22:31 عصر
سلام دوستان

فرمي در2003 Vb.net دارم كه پس از انتخاب گزينه هاي مورد نظر از Combobox هايي كه از ديتابيس پر مي شوند عمليات جستجو را انجام داده و نتيجه را در يك ليست باكسي به نام شماره دانشجويي، شماره دانشجويي هاي يافت شده را نمايش ميدهد. اما پس از فشردن دكمه جستجو اين پيغام خطا را نشان ميدهد.


Object reference not set to an instance


در كجاي اين كد خطا وجود دارد:





If ((cbterm.SelectedValue <> "") And (lbcourse.SelectedValue <> "")) Then

Dim daTest1 AsNew SqlDataAdapter
Dim cnTest1 AsNew System.Data.SqlClient.SqlConnection
Dim dsTest1 AsNew DataSet
dsTest1.Clear()
Dim strSql1 AsString
Dim strCn1 AsString = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=""DB-university"";Data Source=""user-cf89685757"""
Dim sqlCmd1 AsNew SqlCommand
Dim myDT1 AsNew DataTable
cnTest1.ConnectionString = strCn1
' open the connection
Try
cnTest1.Open()
Catch ex As Exception
MsgBox(ex.Message)
MsgBox(ex.Source)
EndTry
strSql1 = "SELECT u_stude.Id FROM u_stude,u_term,u_course,u_selectunit"
strSql1 = strSql1 + " WHERE u_term.term = u_selectunit.term "
strSql1 = strSql1 + " AND u_course.courseno = u_selectunit.courseno"
Dim strSlctTerm AsString
strSlctTerm = cbterm.SelectedValue
If strSlctTerm <> "" Then
strSql1 = strSql1 + " AND u_term.term = '" + strSlctTerm + "'"
EndIf
Dim strSlctcourse AsString
strSlctcourse = lbcourse.SelectedValue
If strSlctcourse <> "" Then
strSql1 = strSql1 + " AND u_course.courseno = '" + strSlctcourse + "'"
EndIf


sqlCmd1.CommandText = strSql1
sqlCmd1.Connection = cnTest1
daTest1.SelectCommand = sqlCmd1
Try
daTest1.Fill(dsTest1, "u_stude.Id")
Dim row AsString
ForEach row In dsTest1.Tables("myDT").Rows
lbId.Items.Add(dsTest1.Tables("myDT").Rows)
'lbId.DataSource = dsTest1.Tables("u_stude")
lbId.DisplayMember = "Id"
lbId.ValueMember = "Id"


Next




Catch ex As Exception
MsgBox(ex.Message)
MsgBox(ex.Source)
EndTry
'lbId.Refresh()
'lbId.DataSource = dsTest1.Tables(0)


' close the connection
cnTest1.Close()
cnTest1 = Nothing
EndIf
EndIf





اين خطا را نيز هنگام حذف سطر از Datagrid در فرم ديگري نشان مي دهد.

KambizZandi
جمعه 01 شهریور 1387, 01:06 صبح
وقتي خطا ميده شماره سطر کد رو هم ميگه
اونو بگو تا ببينم چشه

blackheart
جمعه 01 شهریور 1387, 02:21 صبح
راستش کدتو نخوندم ولی این خطا زمانی رخ می ده که بخوای به یک آبجکت که مقدار دهی نشده آدرس دهی کنی.
واضح تر اینکه بخوای یه مقدار null رو فراخوانی کنی یا داخل دیتابیست یه فیلدی که نمیتونه null باشه رو بخوای با null مقداردهی کنی!!!

sheida-peyravi
جمعه 01 شهریور 1387, 13:51 عصر
دوست عزيز

سطر خطا را نشان نمي ده.
همچنين در جستجو مقدار Null نيست



راستش کدتو نخوندم ولی این خطا زمانی رخ می ده که بخوای به یک آبجکت که مقدار دهی نشده آدرس دهی کنی.
واضح تر اینکه بخوای یه مقدار null رو فراخوانی کنی یا داخل دیتابیست یه فیلدی که نمیتونه null باشه رو بخوای با null مقداردهی کنی!!!

sheida-peyravi
جمعه 01 شهریور 1387, 18:44 عصر
من تمام خط ها را breakpoint گذاشتم ، و كمي تغيير ايجاد كردم در سطري كه حلقه for سطرهاي ديتاست را مي خواند خطا مي گيرد

ali_md110
یک شنبه 03 شهریور 1387, 00:12 صبح
مشکل شما در اداپتور داده و دیتاست هست
daTest1.Fill(dsTest1, "u_stude.Id")
نام جدولتون رو تصحیح کنید

daTest1.Fill(dsTest1, "mydt")

sheida-peyravi
یک شنبه 03 شهریور 1387, 15:15 عصر
كاري كه گفتيد انجام دادم اما باز هم از اين خط خطا مي گيرد.

For Each row In dsTest7.Tables("myDT7").Rows

روح اله معینی زاده
دوشنبه 04 شهریور 1387, 09:03 صبح
سلام
شما مي خواهيد چه كاري انجام دهيد؟ آيا مي خواهيد مقادير موجود در ديتاست رو در ليست‌باكس يا كمبوباكس نمايش دهيد؟

اگر درست گفتم، اين كه راهش نيست، شما بايد DataSource مربوط به ليست يا كمبوباكس رو به اون ديتاست نسبت بديد و بس.

با احترام- خدانگه‌دار

sheida-peyravi
چهارشنبه 06 شهریور 1387, 10:22 صبح
دوستان عزيز
من در بالا هم توضيح داده ام
1) يك فرمي است شامل يك كمبو باكس و يك ليست باكس كه هر دو از ديتابيس پر ميشوند و بايد آيتمي از اين دو كنترل select شود تا جستجو انجام شود ، پس از زدن كليد جستجو اين پيغام خطا را نشان مي دهدوبايد شماره دانشجويي هاي جستجو شده را در يك ليست باكس ديگر نمايش دهد.
بيشتر راه ها را امتحان كردم بعد از جستجو حتي مقادير Datasource,displaymember,Valuemember را به ليست باكس بايند كردم اما همچنان پيغام سر جايش است.
2) در فرم ديگري كه دارم مي خواهم اطلاعاتي كه از ديتابيس به ديتاگريد ريخته شده را بعد از انتخاب سطر حذف بكنم.(با RemoveAt يا Delete) اما آن نيز همين پيغام را مي دهد.

sheida-peyravi
شنبه 09 شهریور 1387, 10:29 صبح
كسي نمي تونه كمك كنه؟

sheida-peyravi
یک شنبه 31 شهریور 1387, 10:32 صبح
كد را به اين ترتيب تغيير دادم و مشكلم حل شد.
اين خطا بعضي وقتها به خاطر اينكه نمي تونه بايند كنه(به هر دليلي) يا توي جستجو مقدارمشابه اي يا تداخلي هست.





strSql7 = "SELECT u_selectunit.Id,u_stude.name FROM u_stude,u_term,u_course,u_selectunit"
strSql7 = strSql7 + " WHERE u_term.Idterm = u_selectunit.Idterm "
strSql7 = strSql7 + " AND u_course.courseno = u_selectunit.courseno"
strSql7 = strSql7 + " AND u_course.prof = u_selectunit.prof"
strSql7 = strSql7 + " AND u_stude.Id = u_selectunit.Id"
Dim strSlctTerm As String

strSlctTerm = (cbterm.SelectedValue)
If strSlctTerm <> "" Then

strSql7 = strSql7 + " AND u_term.Idterm = '" + strSlctTerm + "'"
End If

Dim strSlctcourse As String

strSlctcourse = CStr(lbcourse.SelectedValue)
If strSlctcourse <> "" Then

strSql7 = strSql7 + " AND u_course.courseno = '" + strSlctcourse + "'"
End If


Try

daTest7.Fill(dsTest7, "myDT7")
lbId.DataSource = dsTest7.Tables("myDT7")
lbId.DisplayMember = "Id"
lbId.ValueMember = "Id"



در ضمن در مورد حذف سطر ديتاگريد من از كد زير استفاده كرده ام.




Dim x As Integer = Me.BindingContext(dstest, "mydt").Position

Me.BindingContext(dstest, "mydt").RemoveAt(x(



و ميخواهم فقط از ديتگريد يك سطر حذف كنه.
خطاي value cannot be null.dataset ميدهد
و وقتي هم كه اجرا مي شود تمام سطرها را حذف مي كند .نه سطر انتخاب شده
من نمي خوام دوباره sqlcommand , select تعريف كنم مي خواهم با ديتاست و ديتاتيبلي كه در بخش جستجو پر شده ارتباط برقرار كنم و سطر انتخابي را از همان ديتاست حذف كنم
لطفا راهنمايي كنيد كه چه كارهايي بايد انجام دهم.