منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : طريقة الاتصال واغلاق الاتصال بقاعدة البيانات
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليك

يسعد الله اوقاتكم

عندي استفسار عن طريقه الاتصال واغلاق الاتصال بقاعدة البيانات

الكود الي عندي يعمل بحث في القاعدة اكثر من مره 

كذا
\

كود :
   Dim str As String = String.Format("Data Source= C:\LOG\DB{0}.s3db; version=3;Pooling=True;Synchronous=Off;journal mode=Memory", strcallbk)
   Dim con As New SQLiteConnection(str)



كود :
con.Open()
           Dim cmd41 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop", Stadd), con)
           cmd41.Parameters.AddWithValue("CALLop", Trim(a3))
           Dim rowCount41 As Integer = Convert.ToInt32(cmd41.ExecuteScalar())
           If rowCount41 <> 0 Then
               c1 = "QSO B"
           Else
               c1 = "NEW ON"
           End If



           Dim cmd412 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and bands = @bands", Stadd), con)
           cmd412.Parameters.AddWithValue("CALLop", Trim(a3))
           cmd412.Parameters.AddWithValue("bands", Trim(bandsxxs))

           Dim rowCount412 As Integer = Convert.ToInt32(cmd412.ExecuteScalar())
           If rowCount412 <> 0 Then
               c1 = "QSO B"
           Else
               c1 = "NEW BAND"
           End If



           Dim cmd413 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and modes = @modes", Stadd), con)
           cmd413.Parameters.AddWithValue("CALLop", Trim(a3))
           cmd413.Parameters.AddWithValue("modes", Trim(modesCXXX))

           Dim rowCount413 As Integer = Convert.ToInt32(cmd413.ExecuteScalar())
           If rowCount413 <> 0 Then
               c1 = "QSO B"
           Else
               c1 = "NEW MODE"
           End If




           Dim cmd414 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE country = @country", Stadd), con)
           cmd414.Parameters.AddWithValue("country", Trim(country.Text))

           Dim rowCount414 As Integer = Convert.ToInt32(cmd414.ExecuteScalar())
           If rowCount414 <> 0 Then

           Else
               c1 = "NEW Country"
           End If

           con.Close()


مثل ما ضاهر يعمل فحص اكثر من مره

في البدايه  لازم افتح الاتصال

كود :
con.Open()


ولاكن هل اغلق الاتصال مع كل فحص او في اخر فحص

جربت اغلق الاتصال في كل فحص بس طلع مشكله

كود :
 con.Open()
           Dim cmd41 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop", Stadd), con)
           cmd41.Parameters.AddWithValue("CALLop", Trim(a3))
           Dim rowCount41 As Integer = Convert.ToInt32(cmd41.ExecuteScalar())
           If rowCount41 <> 0 Then
               c1 = "QSO B"
           Else
               c1 = "NEW ON"
           End If
           con.Close()

           con.Open()
           Dim cmd412 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and bands = @bands", Stadd), con)
           cmd412.Parameters.AddWithValue("CALLop", Trim(a3))
           cmd412.Parameters.AddWithValue("bands", Trim(bandsxxs))

           Dim rowCount412 As Integer = Convert.ToInt32(cmd412.ExecuteScalar())
           If rowCount412 <> 0 Then
               c1 = "QSO B"
           Else
               c1 = "NEW BAND"
           End If
           con.Close()

           con.Open()
           Dim cmd413 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and modes = @modes", Stadd), con)
           cmd413.Parameters.AddWithValue("CALLop", Trim(a3))
           cmd413.Parameters.AddWithValue("modes", Trim(modesCXXX))

           Dim rowCount413 As Integer = Convert.ToInt32(cmd413.ExecuteScalar())
           If rowCount413 <> 0 Then
               c1 = "QSO B"
           Else
               c1 = "NEW MODE"
           End If
           con.Close()


           con.Open()
           Dim cmd414 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE country = @country", Stadd), con)
           cmd414.Parameters.AddWithValue("country", Trim(country.Text))

           Dim rowCount414 As Integer = Convert.ToInt32(cmd414.ExecuteScalar())
           If rowCount414 <> 0 Then

           Else
               c1 = "NEW Country"
           End If

           con.Close()



وجربت اغلق الاتصال في الاخير وطلع مشكله



كود :
Connection was closed, statement was terminated vb.net


ما هو الشي الصحيح بارك الله فيكم
اخي الفاضل
تحقق دائما ما اذا كان الاتصال مفتوح ام لا ثم قم بفتحه


كود :
If con.State = ConnectionState.Open Then con.close
وعليكم السلام ورحمة الله وبركاته

كما وضح لك اخى boudyonline

كل ما عليك فعله هو عدم وضع كود الفتح مباشراً بهذا الشكل
كود :
con.Open()

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

ليصبح الشكل بهذا الامر كود الفتح

كود :
If con.State = ConnectionState.Close Then con.Open


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

https://www.youtube.com/playlist?list=PL...TDy9OOOFhj

تحياتى لك
وتمنياتى لك التوفيق
(21-02-19, 12:51 PM)boudyonline كتب : [ -> ]اخي الفاضل
تحقق دائما ما اذا كان الاتصال مفتوح ام لا ثم قم بفتحه


كود :
If con.State = ConnectionState.Open Then con.close



احسنت بارك الله فيك

مشت الامور معاي والحمدالله  Rolleyes

(21-02-19, 03:24 PM)elgokr كتب : [ -> ]
وعليكم السلام ورحمة الله وبركاته

كما وضح لك اخى boudyonline

كل ما عليك فعله هو عدم وضع كود الفتح مباشراً بهذا الشكل
كود :
con.Open()

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

ليصبح الشكل بهذا الامر كود الفتح

كود :
If con.State = ConnectionState.Close Then con.Open


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


تحياتى لك
وتمنياتى لك التوفيق

احسنت استاذي الكريم دائما نستفيد منك 

شكرا لك على المعلومات ساتابع الشرح ان شاءالله

بس سؤال 

هل هذه الطريقه تنفع 

كود :
           
If (con.State.ToString() = "Open") Then
               If con.State <> ConnectionState.Open Then con.Open()
               Dim cmd41 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and bands = @bands and modes = @modes", Stadd), con)
               cmd41.Parameters.AddWithValue("CALLop", Trim(a3))
               cmd41.Parameters.AddWithValue("bands", Trim(bandsxxs))
               cmd41.Parameters.AddWithValue("modes", Trim(modesCXXX))
               Dim rowCount41 As Integer = Convert.ToInt32(cmd41.ExecuteScalar())
               If rowCount41 <> 0 Then

               Else
                   c1 = "M/B"
               End If


           Else

               If con.State = ConnectionState.Closed Then con.Open()
           End If
الأفضل فتح الإتصال بداية الكود

ثم تنفيذ العمليات

في النهاية إغلاق الإتصال
يكتفى ان تجعل الكود بهذا الشكل

كود :
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'
       If con.State <> ConnectionState.Open Then con.Open()
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'

       'بداية كود الاستعلام
       Dim cmd41 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and bands = @bands and modes = @modes", Stadd), con)
       cmd41.Parameters.AddWithValue("CALLop", Trim(a3))
       cmd41.Parameters.AddWithValue("bands", Trim(bandsxxs))
       cmd41.Parameters.AddWithValue("modes", Trim(modesCXXX))
       Dim rowCount41 As Integer = Convert.ToInt32(cmd41.ExecuteScalar())
       If rowCount41 <> 0 Then

       Else
           c1 = "M/B"
       End If
       'نهاية كود الاستعلام


       'ضع اكواد خاصة الاستعلام / البحث هنا كما تشاء


       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'
       con.Close()
       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'


طبق كما هو تم شرحه فى الكود

تحياتى لك
وتمنياتى لك التوفيق
(21-02-19, 04:17 PM)elgokr كتب : [ -> ]وممكن أيضا هكذا : اقتباس من مشاركة المشرف العزيز elgokr

كود :
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'
       If con.State <> ConnectionState.Open Then con.Open()
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'
       

       'ضع اكواد خاصة الاستعلام / البحث هنا كما تشاء


       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'
If con.State = ConnectionState.Open Then        con.Close()
       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'

بالتوفيق للجميع
(21-02-19, 04:09 PM)حريف برمجة كتب : [ -> ]الأفضل فتح الإتصال بداية الكود

ثم تنفيذ العمليات

في النهاية إغلاق الإتصال

احسنت استاذي الكريم

شكرا لوجودك الحمدالله والشكر Rolleyes

(21-02-19, 04:17 PM)elgokr كتب : [ -> ]يكتفى ان تجعل الكود بهذا الشكل

كود :
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'
       If con.State <> ConnectionState.Open Then con.Open()
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'

       'بداية كود الاستعلام
       Dim cmd41 As New SQLiteCommand(String.Format("SELECT * FROM DB{0} WHERE CALLop = @CALLop and bands = @bands and modes = @modes", Stadd), con)
       cmd41.Parameters.AddWithValue("CALLop", Trim(a3))
       cmd41.Parameters.AddWithValue("bands", Trim(bandsxxs))
       cmd41.Parameters.AddWithValue("modes", Trim(modesCXXX))
       Dim rowCount41 As Integer = Convert.ToInt32(cmd41.ExecuteScalar())
       If rowCount41 <> 0 Then

       Else
           c1 = "M/B"
       End If
       'نهاية كود الاستعلام


       'ضع اكواد خاصة الاستعلام / البحث هنا كما تشاء


       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'
       con.Close()
       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'


طبق كما هو تم شرحه فى الكود

تحياتى لك
وتمنياتى لك التوفيق


تم التطبيق والحمدالله  الامور طيبه ولله الحمد

سابقا كانت تطلع لي رساله

كود :
Exception thrown: 'System.IndexOutOfRangeException' in System.Data.SQLite.dll


حاليا لم تطلع

احسنت بارك الله فيك



بس بعد اذنك استاذي ممكن تمر هنا 
http://vb4arb.com/vb/showthread.php?tid=28430
الحمد لله والشكر لله
والحمد لله على كل حال

تحياتى لك
وتمنياتى لك التوفيق