Connexion à une base SQL

arkele Messages postés 20 Date d'inscription samedi 19 juillet 2003 Statut Membre Dernière intervention 28 juin 2005 - 27 juin 2005 à 08:14
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 - 30 juin 2005 à 19:54
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

IvanTheBlackDog Messages postés 39 Date d'inscription mardi 15 mars 2005 Statut Membre Dernière intervention 31 juillet 2006
27 juin 2005 à 16:51
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
0
arkele Messages postés 20 Date d'inscription samedi 19 juillet 2003 Statut Membre Dernière intervention 28 juin 2005
28 juin 2005 à 08:19
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?
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
30 juin 2005 à 19:54
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 !
0
Rejoignez-nous