الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة اثناء البحث بالكود

بدأه sekora في 27 نوفمبر 2011 · 10 رد · 1,395 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخوتى الكرام

السلام عليكم ورحمة الله وبركاته

تمنياتى تكونوا جميعا بخير ان شاء الله تعالى

لدى مشكله بسيطه لكن لم اجد حل لها

الكود التالى يحمل اسماء الجنسيات للعملاء بالكمبوبوكس من قاعدة بيانات sql2005 بالكود التالى

فى الحدث loadform1

        '==========================================================================|
        'الإجراء الخاص بجلب الجنسيات
        ' ذلك من قواعد بيانات الخادم
        '==========================================================================|
        'استدعاءالاتصال العام بقواعد بيانات السيرفر 
        Try
            Me.Cursor = Cursors.WaitCursor
            'معرفة حالة الاتصال العام فإذا كان غير مفتوح 
            If GSQLConnection.State <> ConnectionState.Open Then
                'عندهااستدعي إجراء الاتصال العام من مديول الاتصال
                GeneralConnection()
                Me.Cursor = Cursors.Default
            End If

            If GSQLConnection.State = ConnectionState.Open Then
                GDR = Nothing
                GSQLCmd.CommandType = CommandType.Text
                GSQLCmd.CommandText = "SELECT* FROM nationaltyinfo"
                GDR = GSQLCmd.ExecuteReader
                Do While GDR.Read()
                    nationalty.Items.Add(GDR.GetSqlString(1))
                    Application.DoEvents()
                Loop
                GDR.Close()
                GSQLConnection.Close()
                Me.Cursor = Cursors.Default
            End If
        Catch
        Finally
            Me.Cursor = Cursors.Default
            GSQLConnection.Close()
        End Try

والكود التالى يقوم بعملية البحث باسم العميل

        '|--------------------------------------------------------|
        '|           الكود الخاص بالبحث بكود العميل                |
        '|--------------------------------------------------------|

        'معرفة حالة الاتصال العام فإذا كان غير مفتوح 
        If GSQLConnection.State <> ConnectionState.Open Then
            'عندهااستدعي إجراء الاتصال العام من مديول الاتصال
            GeneralConnection()

        End If
        'GDR.Close()
        If code_cost.Text = "" Then
            MsgBox("الرجاء ادخال كود العميل المراد البحث عنها ", MsgBoxStyle.Information + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.OkOnly, "AutoConnect")
            code_cost.Focus()
        Else
            Try
                GSQLCmd.Parameters.Clear()
                GSQLCmd.CommandType = CommandType.Text
                GSQLCmd.CommandText = "select * from customer_Info where code_cost='" & code_cost.Text & "' and Branch_code= '" & Branch_code.Text & "'" ' بحث بشرطين
                GSQLCmd.CommandType = CommandType.Text
                Dim rd As SqlClient.SqlDataReader = GSQLCmd.ExecuteReader
                If rd.Read = True Then
                    code_cost.Text = rd.GetValue(0)
                    name_cost.Text = rd.GetValue(1)
                    mobil.Text = rd.GetValue(2)
                    Address.Text = rd.GetValue(3)
                    Email.Text = rd.GetValue(4)


                Else
                    MsgBox("هذا العميل غير موجود ", MsgBoxStyle.Information + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.OkOnly, "AutoConnect")
                    rd.Close()
                    Exit Sub
                End If
                rd.Close()
            Catch exp As Exception
                MsgBox(exp.Message)
            End Try

        End If

المشكله عندما اقوم باستخدام الكود الثانى كود البحث بكود العميل تظهرى لى الرساله

There is already an open DataReader associated with this Command which must be closed first.

---------------------------

OK

---------------------------

وعندما اقوم بالضغط على ok تظهر نتيجة البحث عادى وعند ايقاف الكود الاول الخاص بجلب الجنسيات من قاعدة البيانات فى الكومبوبوكس من اللود للفورم تنتهى المشكله

ارجو من الاخوه مراجعة الكود الاول وان كان هناك مشكله او كود بديل ارجو طرحه

تمنياتى لكم بدوام التوفيق والتقدم

بانتظار ردودكم

سلام الله عليكم

post-35995-064406500 1322424633_thumb.jp

المرفقات
msg1.jpg
#2

السلام عليكم

اضف على الاتصال Connection string الجملة التالية

;MultipleActiveResultSets=True

وارجو ان تبحث عن رسالة الخطأ جرب هنا

1
#3
TareqVB كتب:

السلام عليكم

اضف على الاتصال Connection string الجملة التالية

;MultipleActiveResultSets=True

وارجو ان تبحث عن رسالة الخطأ جرب هنا

شكرا لك اخى الكريم على اهتمامك وردك

جربت ما ذكرته ولم تنجح ارجو منك وضع الحل على نفس الكود لكى يمكننى المقارنه الكود القديم بالجديد ومعرفة الحل بوضوح وهل سيطبق الحل الذى ذكرته على الكودين ام كود واحد

اشكرك جدا مره اخرى واشكركم جميعا

بانتظار ردودكم

#4

السلام عليكم ورحمه الله وبركاته

كلام الاخ طارق سليم اذا كنت تستخدم SQL Server 2005

.:: Wish to become better and better ::.

#5

السلام عليكم ورحمه الله وبركاته

اخي قم باضافة الكود التالي بعد جملة الـ Try في الكود الثاني

GSQLCmd= New SqlCommand()
GSQLCmd.Connection=GSQLConnection

.:: Wish to become better and better ::.

#6
sekora كتب:

اخوتى الكرام

السلام عليكم ورحمة الله وبركاته

المشكله عندما اقوم باستخدام الكود الثانى كود البحث بكود العميل تظهرى لى الرساله

There is already an open DataReader associated with this Command which must be closed first.

---------------------------

OK

---------------------------

وعندما اقوم بالضغط على ok تظهر نتيجة البحث عادى وعند ايقاف الكود الاول الخاص بجلب الجنسيات من قاعدة البيانات فى الكومبوبوكس من اللود للفورم تنتهى المشكله

ارجو من الاخوه مراجعة الكود الاول وان كان هناك مشكله او كود بديل ارجو طرحه

تمنياتى لكم بدوام التوفيق والتقدم

بانتظار ردودكم

سلام الله عليكم

السلام عليكم

قم بوضع الكود التالي قبل كود البحث

If rd.IsClosed = False Then rd.Close

تم تعديل هذه المشاركة بواسطة Mady-AGC في 29 نوفمبر 2011 في 20:12

منحة للخريجين وطلاب الجامعات و المعاهد

دبلومة لتخريج مبرمج متخصص في هندسة صناعة البرمجيات وتصميم وبرمجة تطبيقات الأنترنت

سبحان الله وبحمده سبحان الله العظيم

#7
Mady-AGC كتب:

السلام عليكم

قم بوضع الكود التالي قبل كود البحث

If rd.IsClosed = False Then rd.Close

اشكركم اخوتى الكرام على التواصل

جربت الحلين وللاسف المشكله مازالت موجوده

#8

السلام عليكم

هو بشكل عام سبب المشكلة فتح اكثر من datareader في نفس الوقت او عدم اغلاقهم بعد الانتهاء منهم الحلول :

  • استخدام ;MultipleActiveResultSets=True وهو الحل الاسهل (ان امكن ان نرى كيف اصبحت جملة الاتصال عندك).
  • استخدام dataset بدل datareader .
  • استخدام usin

g للتأكد من اغلاف datareader طبعا في جميع الكود عن طريق البحث عن اي datareader طريقة الاستخدام كمايلي

using rd As SqlClient.SqlDataReader = GSQLCmd.ExecuteReader

ضع هنا الكود

.......

End Using

#9
sekora كتب:

اشكركم اخوتى الكرام على التواصل

جربت الحلين وللاسف المشكله مازالت موجوده

السلام عليكم

قم بوضع الكود التالي قبل كود البحث

If GDR.IsClosed = False Then GDR.Close 
If rd.IsClosed = False Then rd.Close

أو حاول استخدام هذا الكود

 '|--------------------------------------------------------| 
    	'|       	الكود الخاص بالبحث بكود العميل            	| 
    	'|--------------------------------------------------------| 

    	'معرفة حالة الاتصال العام فإذا كان غير مفتوح  
    	If GSQLConnection.State <> ConnectionState.Open Then 
        	'عندهااستدعي إجراء الاتصال العام من مديول الاتصال 
        	GeneralConnection() 

    	End If 
    	'GDR.Close() 
    	If code_cost.Text = "" Then 
        	MsgBox("الرجاء ادخال كود العميل المراد البحث عنها ", MsgBoxStyle.Information + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.OkOnly, "AutoConnect") 
        	code_cost.Focus() 
    	Else 
        	Try 
  If GDR.IsClosed = False Then GDR.Close 
  If rd.IsClosed = False Then rd.Close
            	GSQLCmd.Parameters.Clear() 
            	GSQLCmd.CommandType = CommandType.Text 
            	GSQLCmd.CommandText = "select * from customer_Info where code_cost='" & code_cost.Text & "' and Branch_code= '" & Branch_code.Text & "'" ' بحث بشرطين 
            	GSQLCmd.CommandType = CommandType.Text 
  Dim rd As SqlClient.SqlDataReader = GSQLCmd.ExecuteReader 
            	If rd.Read = True Then 
                	code_cost.Text = rd.GetValue(0) 
                	name_cost.Text = rd.GetValue(1) 
                	mobil.Text = rd.GetValue(2) 
                	Address.Text = rd.GetValue(3) 
                	Email.Text = rd.GetValue(4) 


            	Else 
                	MsgBox("هذا العميل غير موجود ", MsgBoxStyle.Information + MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading + MsgBoxStyle.OkOnly, "AutoConnect") 
                	rd.Close() 
                	Exit Sub 
            	End If 
            	rd.Close() 
        	Catch exp As Exception 
            	MsgBox(exp.Message) 
        	End Try 

    	End If

تم تعديل هذه المشاركة بواسطة Mady-AGC في 30 نوفمبر 2011 في 19:12

منحة للخريجين وطلاب الجامعات و المعاهد

دبلومة لتخريج مبرمج متخصص في هندسة صناعة البرمجيات وتصميم وبرمجة تطبيقات الأنترنت

سبحان الله وبحمده سبحان الله العظيم

#11

جرب ان تضع قفل DataReader بعد كلمة Finally

ونصيحة لك جرب ان تنفذ الكود خطوة خطوة عن طريق F8 وعندها تعرف اين الخطأ

وكذلك انصحك بأستخدام Using فهي ستتكفل بقفل وانهاء المستخدم بعدها

وهذا يوفر عليك عناء البحث عن Objects الغير مقفلة

تزودوا فأن خيرا الزاد التقوى

اللهم انصر اخواننا المسلمين المجاهدين في كل مكان

مواضيع مشابهة