Connexion à une base SQL

Signaler
Messages postés
20
Date d'inscription
samedi 19 juillet 2003
Statut
Membre
Dernière intervention
28 juin 2005
-
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
-
J'utilise une base de données SQl Server.
Comme dans mon application j'utilise un grand nombre de reader, j'ai créé une fonction SQL_Reader qui permet de créer un reader à partir d'une requêt SQL placée en paramètre de ma fonction.
Ma fonction est la suivante :


Public
Function SQL_Reader(
ByVal Req_SQL
As
String)
As SqlDataReader



Dim oConn
As
New SqlConnection(ConfigurationSettings.AppSettings("SqlServer"))
oConn.Open()

Dim myCommand
As SqlCommand =
New SqlCommand(Req_SQL, oConn)

Dim monSQL_Reader
As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
SQL_Reader = monSQL_Reader



End
Function

Je renvoie le reader. Le problème s'est que je ne sais pas comment fermer ma connexion à ma base de données vu que oConn est déclaré dans ma fonction.
Si je ne la ferme pas, il me dit qu'une connexion est déjà ouverte lorsque je veux créer un nouveau reader.
Où dois je fermer ma connexion,

Merci,

3 réponses

Messages postés
39
Date d'inscription
mardi 15 mars 2005
Statut
Membre
Dernière intervention
31 juillet 2006

Public
Function SQL_Reader(
ByVal Req_SQL
As
String)
As SqlDataReader



Dim oConn
As
New SqlConnection(ConfigurationSettings.AppSettings("SqlServer"))
oConn.Open()

Dim myCommand
As SqlCommand =
New SqlCommand(Req_SQL, oConn)

Dim monSQL_Reader
As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
SQL_Reader = monSQL_Reader


oConn.Close
Set oConn=Nothing

End
Function

je pense que ça devrait aller.
______________________
Le Black Dog c'est moi
Messages postés
20
Date d'inscription
samedi 19 juillet 2003
Statut
Membre
Dernière intervention
28 juin 2005

c'est pas possible que je le ferme dans ma fonction car je ne pourrai plus utiliser le reader par la suite. si je mets oConn.close dans cette fonction, il va m'ouvrir ma connexion, créer le reader et me fermer ma connexion ce qui va m'empêcher de pouvoir utiliser mon reader. J'ai essayé et le message d'erreur était : "tentative non valide de lecture...".

une autre idée peut être?
Messages postés
1642
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
Salut,

Dans ce cas là tu dois créer une classe :



Public Class SQL_Reader


Private
oConn
As
New SqlConnection(ConfigurationSettings.AppSettings("SqlServer"))



Public Sub New()

oConn.Open

End Sub



Public Sub Finalize()

oConn.Close

oConn = Nothing

End Sub



Public
Function Read(
ByVal Req_SQL
As
String)
As SqlDataReader




Dim oConn
As
New SqlConnection(ConfigurationSettings.AppSettings("SqlServer"))
oConn.Open()

Dim myCommand
As SqlCommand =
New SqlCommand(Req_SQL, oConn)

Dim monSQL_Reader
As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
Read = monSQL_Reader




End
Function

End Class



Et tu l'utilise comme ça :



Dim machin As SQL_Reader 'tu déclenche l'énènement New()

Dim truc As DataReader = machin.Read

' là tu mets tout le traitement qui a besoin que la connexion soit ouverte

machin = Nothing ' tu déclenche l'évènement Finalize() et ça ferme la connexion


Nurgle
C'est une grande folie que de vouloir être sage tout seul !