VB .Net Connexion permanante à une base de donées

VB .Net Connexion permanante à une base de donées - VB/VBA/VBS - Programmation

Marsh Posté le 11-10-2005 à 08:35:55    

Bonjour à tous,
 
Je suis actuellemetnt en train de concevoir une application sous VB .Net nececitant un accés aux données ( MS SQL server 2000).
 
Pour faciliter l'execution des requetes j'ai créé moi même un objet "SqlQueryObjet" qui se base sur un DataReader
 
La BD de mon application est aussi accessible via une interface web (où elle peut être modifiée) par concequant je ne peu utiliser qu'un mode CONNECTE à la BD afin que l'application soit capable de tenir compte des deernieres modifications.
 
Pour gagner du temps d'Execution je voudrais faire en sorte de connecter mon programme une seule fois à la BD et qu'il reste connecte tout au long de l'éxecution un peu comme un Mysqlpconnect() en PHP.
.
Tout se passe bien à la premiere requete mais c'est à partir de la seconde que je reçoit un message d'erreur:
 
Execute Reader requires an open and available connection. The connection current state is closed.
 
Alors que la premeire requete passe toujours tres bien et que je ne lui ai jamais di de fermer la connection mais de fermer le datareader !
 
Comment faire pour garder la connection ouverte aprés la fermeture du Datareader (si je ne ferme pas le datareader j'ai un message d'erreur "there is already an open datareader associated with this connection wich must be closed first" )
 
Il faut pourtant que je trouve un moyen de rester connecter à la BD car c'est beaucoup trop long de s'y connecter puis de s'en deconnecter avant et aprés chaque requétes mais là rerieusement je séche...
 
Voici mon code source
 
 
Public Class SqlQueryObject
    Private TR As Long
    Private CS As String
 
    Public Function SqlRqst(ByVal request As String) As String()
 
        Dim sqlcmd As New SqlClient.SqlCommand
        Dim reader As SqlClient.SqlDataReader
 
        Dim reponses(0) As String
        Dim i As Integer
 
        sqlcmd.CommandType = CommandType.Text
        sqlcmd.Connection = C 'PB ici a la deuxieme requete
        'The SQL commend is currently Open, Busy, fetching
        sqlcmd.CommandText = request
 
        Try 'Essayons d'executer la requete
            reader = sqlcmd.ExecuteReader(CommandBehavior.CloseConnection)
        Catch ex As Exception 'Oups !
            MsgBox(request & Chr(10) & Chr(10) & ex.Message, MsgBoxStyle.Critical, "Database Error" )
        End Try
        TR += 1 '//augmentation du compteur de requetes
        If reader.HasRows Then 'si il y a des resultats  
            i = 0
            While reader.Read() 'Tant qu'il y a des resultats ds le DataReader
 
                reponses(UBound(reponses)) = reader(0)
 
                ReDim Preserve reponses(UBound(reponses) + 1)
 
                i += 1
            End While
        End If
        Console.WriteLine("SQL: " & request)
        reader.Close()
        Return reponses
    End Function
    Public Function connect()
        C = New SqlClient.SqlConnection(CS)
 
        C.Open()
    End Function
 
    Public Function close()
        C.Close()
    End Function
    Public ReadOnly Property NumberOfRequests()
        Get
            Return TR
        End Get
    End Property
    Public Property ConnectString() As String
        Get
            Return CS
        End Get
        Set(ByVal Value As String)
            CS = Value
        End Set
    End Property
End Class
 
 
Si quelqu'un sait comment contourner le probléme je suis preneur  !
 
Merci d'avance
 

Reply

Marsh Posté le 11-10-2005 à 08:35:55   

Reply

Marsh Posté le 13-10-2005 à 22:09:11    

As tu essayé de mettre en commentaire  reader.Close() ?
Car je me demande si ca ne ferme pas ta connection au passage ...
 
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed