لدي المشكلة التالية:
استعمل vb.net2003 و sql server2000 و استعمل الوضع المنفصل في الاتصال..
و لدي 3 جداول, وضعت كلا منهم في SqlDataAdapter لوحده , ثم جمعتهم في DataSet واحده لعرض البيانات في data grid واحده , المشكلة تظهر عند عمل بحث, حيث يعرض النتائج لفترة , ثم تظهر لي المسج التالية:
there is already an open DataReader associated with this connection which must be closed first.
, وعند عمل تعديل يظهر المسج:
invalid attemp to read when data is in percent
مع العلم اني لم أغير تصميم الجداول أو خصائص الحقول, وقد حذفت ال SqlDataAdapter والDataSet و ا SqlConnectionو عملتهم مرة اخرى و لكن نفس النتيجة يعمل لفترة ثم تظهر المسج, وكذلك كود البحث و التعديل يعمل في شاشة أخرى مكونه من جدولين بشكل صحيح تماما...أما في هذه الشاشة لا..
أعتقد انا أن المشكلة تتعلق بكون الdatagrid تحتوي على 3 جداول ولكن لا اعرف ما الحل ؟
وهذا هو كود البحث:
Try
If Me.cbInstructorID1.Checked = False And Me.cbInstructorName1.Checked = False And Me.cbQualifications1.Checked = False Then
MsgBox("لم يتم اختيار مفتاح للبحث")
Else
Dim SearchInstructorID As Integer
Dim SearchInstructorName, SearchQualification As String
SQLstatment = "select * from Instructor "
If Me.cbInstructorID1.Checked = True Then
If Val(Me.txtSearchInstructorID1.Text) >= 0 Then
If SQLstatment = "select * from Instructor " Then
SQLstatment = SQLstatment + " where Instructor_ID=" + Str(Val(Me.txtSearchInstructorID1.Text))
Else
SQLstatment = SQLstatment + " and Instructor_ID=" + Str(Val(Me.txtSearchInstructorID1.Text))
End If
End If
End If
If Me.cbInstructorName1.Checked = True Then
If Me.txtSearchInstructorName1.Text <> "" Then
If SQLstatment = "select * from Instructor " Then
SQLstatment = SQLstatment + "where Instructor_Name like N'%" + Me.txtSearchInstructorName1.Text + "%'"
Else
SQLstatment = SQLstatment + "and Instructor_Name like N'%" + Me.txtSearchInstructorName1.Text + "%'"
End If
End If
End If
If Me.cbQualifications1.Checked = True Then
If Me.txtSearchQualifications1.Text <> "" Then
If SQLstatment = "select * from Instructor " Then
SQLstatment = SQLstatment + "where Qualifications like N'%" + Me.txtSearchQualifications1.Text + "%'"
Else
SQLstatment = SQLstatment + "and Qualifications like N'%" + Me.txtSearchQualifications1.Text + "%'"
End If
End If
End If
'MsgBox("final SQL statement is : " + SQLstatment)
Dim cmdSearch As New SqlCommand
cmdSearch.CommandText = SQLstatment
cmdSearch.Connection = MyConn
MyConn.ConnectionString = "workstation id=local;packet size=4096;integrated security=SSPI;data source='';persist security info=False;initial catalog=TCCNR"
If MyConn.State = ConnectionState.Closed Then
MyConn.Open()
End If
Dim drSearch As SqlDataReader = cmdSearch.ExecuteReader
drSearch.Read()
If drSearch.HasRows = False Then
MsgBox("لا يوجد سجلات مطابقة !!")
Me.btnModify1.Enabled = False
Me.btnEraseDBFields.Enabled = False
Else
'---------new---------------------------------------
Dim cmdMySearch As New SqlCommand
cmdMySearch.CommandText = SQLstatment
cmdMySearch.Connection = Me.SqlConnection1
Dim cmdViewWorkPlace As New SqlCommand
Dim WorkPlace_SQL_Statement As String
WorkPlace_SQL_Statement = "select * from Work_Place;"
cmdViewWorkPlace.CommandText = WorkPlace_SQL_Statement
cmdViewWorkPlace.Connection = Me.SqlConnection1
Dim cmdViewNationality As New SqlCommand
Dim Nationality_SQL_Statement As String
Nationality_SQL_Statement = "select * from Nationality;"
cmdViewNationality.CommandText = Nationality_SQL_Statement
cmdViewNationality.Connection = Me.SqlConnection1
If SqlConnection1.State = ConnectionState.Closed Then
SqlConnection1.Open()
End If
Me.SqlDataAdapter1.SelectCommand = cmdMySearch
Me.SqlDataAdapter2.SelectCommand = cmdViewWorkPlace
Me.SqlDataAdapter3.SelectCommand = cmdViewNationality
Me.DS_Instructors1.Clear()
Me.SqlDataAdapter1.Fill(Me.DS_Instructors1)
Me.SqlDataAdapter2.Fill(Me.DS_Instructors1)
Me.SqlDataAdapter3.Fill(Me.DS_Instructors1)
SqlConnection1.Close()
Me.NDG_Search_Instructor.Enabled = True
Me.btnModify1.Enabled = True
Me.btnEraseDBFields.Enabled = True
Me.NDG_Search_Instructor.Expand(-1)
'------------------------------------------------------------------
Me.txtSearchInstructorID1.Text = Val(drSearch.Item("Instructor_ID"))
Me.txtSearchInstructorName1.Text = drSearch.Item("Instructor_Name")
Me.txtSearchQualifications1.Text = drSearch.Item("Qualifications")
Me.btnModify1.Enabled = True
End If
drSearch.Close()
MyConn.Close()
End If
Catch ex1 As SqlException
MsgBox(ex1.Message)
MyConn.Close()
Catch ex2 As Exception
MsgBox(ex2.Message)
MyConn.Close()
End Tryوكود التعديل:
Me.SqlDataAdapter1.Update(Me.DS_Instructors1) Me.SBInstructors.Text = "تم حفظ البيانات بنجاح " '--------------------------------------------------------------- Dim db As New SqlCommandBuilder(da) da.UpdateCommand = db.GetUpdateCommand da.DeleteCommand = db.GetDeleteCommand da.InsertCommand = db.GetInsertCommand da.Update(ds, "Instructor")
أرجو ممن يعرف الحل أن يساعدني , وله مني خالص الدعاء...