تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكلة في فتح وغلق الاتصال عند الاستعلام
#11
هلا وغلا اخي العزيز

اذا كنت تتصل بقاعدة بيانات على سيرفر. او حتى شبكة محلية

لازم :- وهو الافضل ان تفتح اتصال وتغلقة عند كل استعلام. حتى تتجنب مشاكل انقطاع الشبكة والبطئ. وغيرها .

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

لكن ربما الكلاس التالي يساعدك

PHP كود :
Imports System.Data.SqlClient

Public Class CairoConnection

    Implements IDisposable

    Private _disposed 
As Boolean
    Private _conn 
As SqlConnection
    Private _command 
As SqlCommand

    Public Sub 
New(connectionString As String)
 
       _conn = New SqlConnection(connectionString)
 
       _command = New SqlCommand
    End Sub

    Public ReadOnly Property Connection 
As SqlConnection
        Get
            Return _conn
        End Get
    End Property

    Public ReadOnly Property Command 
As SqlCommand
        Get
            Return _command
        End Get
    End Property

    Private Sub CloseConnection
()
 
       _conn.Close()
 
   End Sub

    Private Sub DisposeSqlObjects
()
 
       CloseConnection()
 
       If _conn IsNot Nothing Then
            _conn
.Dispose()
 
           _conn Nothing
        End 
If
 
       If _command IsNot Nothing Then
            _command
.Dispose()
 
           _command Nothing
        End 
If
 
   End Sub

    Protected Overridable Sub Dispose
(disposing As Boolean)
 
       If _disposed Then
            Return
        End 
If

 
       If disposing Then
            DisposeSqlObjects
()
 
       End If
 
       _disposed True
    End Sub

    Public Sub Dispose
() Implements IDisposable.Dispose
        Dispose
(True)
 
       ' GC.SuppressFinalize(Me)
    End Sub

End Class 



الإستخدام
او استخدم الكلاس كما يحلو لك أكيد أنت أكثر خبرة مني في قواعد البيانات


PHP كود :
       Dim s As String "Your Connection" ' read connection from ConfigurationManager
        Using conn As New CairoConnection(s)
            ' 
do something

            Dim queryString 
As String "any query String"
 
           conn.Connection.Open()
 
           conn.Command.CommandText queryString
            conn
.Command.CommandType CommandType.Text
            conn
.Command.ExecuteNonQuery()

 
       End Using 
متهيألي تقدر تكتب كل أوامر الاستعلام في الكلاس
وتنفذها مرة واحدة
الرد }}}
تم الشكر بواسطة:
#13
لتقطع الشك باليقين، اكتب كوداً يفحص حالة الاتصال قبل تنفيذ الاستعلامات.
إن كان متصلاً، نفذ استعلاماتك.
إن لم يكن متصلاً، اتصل ثم نفذ تعليماتك.

(15-07-17, 12:58 PM)sendbad100 كتب : هلا وغلا اخي العزيز

اذا كنت تتصل بقاعدة بيانات على سيرفر. او حتى شبكة محلية

لازم  :-  وهو الافضل   ان تفتح اتصال  وتغلقة عند كل استعلام. حتى تتجنب مشاكل انقطاع الشبكة والبطئ. وغيرها .

اما اذا كنت على نفس الجهاز   فيمكن ان تتصل مع بداية تشغيل البرنامج  ويكفيك ذلك حتى تغلقة.

نعم الرأي. وهذا ما أحبذه.

(15-07-17, 12:32 PM)Dr.Sherif Alazizi كتب : حياك الله اخي سندباد ..

لكني اخي الفاضل عند تنفيذ استعلام آخر بعد أول اتصال
يظهر لي رسالة بان الاتصال مفتوح لابد من اغلاقه أولا

وكذلك العكس بالطبع
لو كان مغلق يخبرني بانه لابد من فتحه

فأضطر الى اغلاق الاتصال الاول ثم فتح اتصال جديد مع كل عملية اتصال
فالمجمل يكون الاتصال بطيئ

خاصة اني اتصل عن طريق قاعدة بيانات MS-SQL على سيرفر على الانترنت
ويحدث هذا أيضا عند الاتصال بقاعدة بيانات من نوع MYSQL غير انها أبطأ عند الاتصال مع DESKTOP APPLICATION

لكن هذا ابدا لايحدث مع الاكسيس

ذلك صحيح لأنك تتصل عن بعد. ولا يحدث مع أكسس لأنه في نفس الجهاز.
لكن مع ذلك، لا تعتمد على أكسس كثيراً، فستخذلك يوماً ما، وهذا عن تجربة.
الرد }}}
تم الشكر بواسطة:
#14
(15-07-17, 12:58 PM)sendbad100 كتب : هلا وغلا اخي العزيز

اذا كنت تتصل بقاعدة بيانات على سيرفر. او حتى شبكة محلية

لازم  :-  وهو الافضل   ان تفتح اتصال  وتغلقة عند كل استعلام. حتى تتجنب مشاكل انقطاع الشبكة والبطئ. وغيرها .

اما اذا كنت على نفس الجهاز   فيمكن ان تتصل مع بداية تشغيل البرنامج  ويكفيك ذلك حتى تغلقة.

نعم .. بارك الله فيك اخي سندباد
فهذا ما قمت به وفضلته بالفعل
قمت فقط بالاستغناء عن بعض الاستعلامات التي قد تكون زائده عن الحاجه او ترفيهية نوعا ما حتى لا يبدو البرنامج بطيئا
جزاك الله خيرا ,,

(15-07-17, 10:35 PM)أبوبكر سويدان كتب : لتقطع الشك باليقين، اكتب كوداً يفحص حالة الاتصال قبل تنفيذ الاستعلامات.
إن كان متصلاً، نفذ استعلاماتك.
إن لم يكن متصلاً، اتصل ثم نفذ تعليماتك.

 بالفعل الكود يقوم بمحاولة الاتصال أولا فان اتصل قام بتنفيذ الاستعلام ولا فانه لايقوم بالاستعلام ..

[quote pid='102620' dateline='1500107565']
ذلك صحيح لأنك تتصل عن بعد. ولا يحدث مع أكسس لأنه في نفس الجهاز.

لكن مع ذلك، لا تعتمد على أكسس كثيراً، فستخذلك يوماً ما، وهذا عن تجربة.

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

جزاك الله خيرا اخي ابو بكر


[/quote]

(15-07-17, 01:15 PM)silverlight كتب : لست خبير قواعد بيانات

لكن ربما الكلاس التالي يساعدك

PHP كود :
Imports System.Data.SqlClient

Public Class CairoConnection

    Implements IDisposable

    Private _disposed 
As Boolean
    Private _conn 
As SqlConnection
    Private _command 
As SqlCommand

    Public Sub 
New(connectionString As String)
 
       _conn = New SqlConnection(connectionString)
 
       _command = New SqlCommand
    End Sub

    Public ReadOnly Property Connection 
As SqlConnection
        Get
            Return _conn
        End Get
    End Property

    Public ReadOnly Property Command 
As SqlCommand
        Get
            Return _command
        End Get
    End Property

    Private Sub CloseConnection
()
 
       _conn.Close()
 
   End Sub

    Private Sub DisposeSqlObjects
()
 
       CloseConnection()
 
       If _conn IsNot Nothing Then
            _conn
.Dispose()
 
           _conn Nothing
        End 
If
 
       If _command IsNot Nothing Then
            _command
.Dispose()
 
           _command Nothing
        End 
If
 
   End Sub

    Protected Overridable Sub Dispose
(disposing As Boolean)
 
       If _disposed Then
            Return
        End 
If

 
       If disposing Then
            DisposeSqlObjects
()
 
       End If
 
       _disposed True
    End Sub

    Public Sub Dispose
() Implements IDisposable.Dispose
        Dispose
(True)
 
       ' GC.SuppressFinalize(Me)
    End Sub

End Class 



الإستخدام
او استخدم الكلاس كما يحلو لك أكيد أنت أكثر خبرة مني في قواعد البيانات


PHP كود :
       Dim s As String "Your Connection" ' read connection from ConfigurationManager
        Using conn As New CairoConnection(s)
            ' 
do something

            Dim queryString 
As String "any query String"
 
           conn.Connection.Open()
 
           conn.Command.CommandText queryString
            conn
.Command.CommandType CommandType.Text
            conn
.Command.ExecuteNonQuery()

 
       End Using 
متهيألي تقدر تكتب كل أوامر الاستعلام في الكلاس
وتنفذها مرة واحدة


تسلم ايدك أستاذي الكبير silverlight
كلاس رائع من شخص أروع
الله لا يحرمنا من وجودك


ربما تغمض عينيك في سقف غرفتك فلا تفتحها الا أمام جبار السماوات والأرض يوم القيامه ... 
 " لا تنس آخرتك "
الرد }}}
تم الشكر بواسطة: sendbad100 , sendbad100



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم