منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] طريقة الاتصال واغلاق الاتصال بقاعدة البيانات (/showthread.php?tid=28708)



طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - dubai.eig - 21-02-19

السلام عليك

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

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

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

كذا
\

كود :
   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


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


RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - boudyonline - 21-02-19

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


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



RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - elgokr - 21-02-19

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

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

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

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

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

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


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

https://www.youtube.com/playlist?list=PLwj1YcMhLRN382FtRabV5VjTDy9OOOFhj

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



RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - dubai.eig - 21-02-19

(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



RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - حريف برمجة - 21-02-19

الأفضل فتح الإتصال بداية الكود

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

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


RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - elgokr - 21-02-19

يكتفى ان تجعل الكود بهذا الشكل

كود :
       '\\\\\\\\\\\\\\\\ كود فتح الاتصال /////////////'
       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()
       '\\\\\\\\\\\\\\\\ كود اغلاق الاتصال /////////////'


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

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



RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - حريف برمجة - 21-02-19

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

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

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


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

بالتوفيق للجميع



RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - dubai.eig - 21-02-19

(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


RE: طريقة الاتصال واغلاق الاتصال بقاعدة البيانات - elgokr - 22-02-19

الحمد لله والشكر لله
والحمد لله على كل حال

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