Message d'erreur de LINQ to SQL

Le
Gilbert Tordeur
Bonjour,

Lorsque je tente d'exécuter une instruction Linq pour lire une ligne d'une
table SQL, j'obtiens le message d'erreur suivant à l'exécution de
l'instruction "If LaRegle.Count < 1" :
InvalidOperationException : Un DataReader associé à cette commande est déjà
ouvert. Il doit d'abord être fermé.

Je ne comprends pas ce que ce message signifie. Voici mon code ci-dessous.
Quelqu'un a-t-il une idée ?

Merci d'avance,
Gilbert.

Private Function DeterminerRegleCautionBancaire(ByVal mntCautionBancaire As
Decimal _
, ByVal durCautionBancaire As Integer) As Boolean
DeterminerRegleCautionBancaire = False
Dim ContexteRegle As New
DoaReglesCautionBancaireDataContext(ObjSessionDivers.OpenFinance)
Dim LaRegle = From Regle In ContexteRegle.DoaReglesCautionBancaire _
Where ( _
(Regle.RebMntCautionBancaire >= mntCautionBancaire) _
And (regle.RebDurCautionBancaire >= durCautionBancaire) _
) _
Order By Regle.RebMntCautionBancaire Ascending _
, Regle.RebDurCautionBancaire Ascending _
Take 1

If LaRegle.Count < 1 Then
Alert.Show(String.Format(Msg018, "de la caution bancaire"))
Exit Function
End If

NumRegleCautionBancaire = LaRegle.First.RebNumRegle
LaRegle = Nothing
ContexteRegle = Nothing
DeterminerRegleCautionBancaire = True
End Function
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #16706001
Bonjour,

A priori on tente plusieurs lectures en même temps sur une même connexion.

Dès la première exécution ? Qu'est ce que cela donne avec un
ContexteRegle.Dispose (bien placé pour qu'il soit toujours exécuté) ?

Cela n'a rien à voir mais les noms me paraissent un peu étranges (le nom du
contexte est le même que le nom de la table exposée par ce contexte ?)

--
Patrice

"Gilbert Tordeur" groupe de discussion :
Bonjour,

Lorsque je tente d'exécuter une instruction Linq pour lire une ligne d'une
table SQL, j'obtiens le message d'erreur suivant à l'exécution de
l'instruction "If LaRegle.Count < 1" :
InvalidOperationException : Un DataReader associé à cette commande est
déjà ouvert. Il doit d'abord être fermé.

Je ne comprends pas ce que ce message signifie. Voici mon code ci-dessous.
Quelqu'un a-t-il une idée ?

Merci d'avance,
Gilbert.

Private Function DeterminerRegleCautionBancaire(ByVal mntCautionBancaire
As Decimal _
, ByVal durCautionBancaire As Integer) As Boolean
DeterminerRegleCautionBancaire = False
Dim ContexteRegle As New
DoaReglesCautionBancaireDataContext(ObjSessionDivers.OpenFinance)
Dim LaRegle = From Regle In ContexteRegle.DoaReglesCautionBancaire _
Where ( _
(Regle.RebMntCautionBancaire >= mntCautionBancaire) _
And (regle.RebDurCautionBancaire >= durCautionBancaire) _
) _
Order By Regle.RebMntCautionBancaire Ascending _
, Regle.RebDurCautionBancaire Ascending _
Take 1

If LaRegle.Count < 1 Then
Alert.Show(String.Format(Msg018, "de la caution bancaire"))
Exit Function
End If

NumRegleCautionBancaire = LaRegle.First.RebNumRegle
LaRegle = Nothing
ContexteRegle = Nothing
DeterminerRegleCautionBancaire = True
End Function



Gilbert Tordeur
Le #16708991
Merci Patrice,
En fait, un DataReader était bien ouvert sur la même connexion. J'ai été
induit en erreur par "associé à cette commande".
En ce qui concerne les noms : le nom du contexte comporte le mot Contexte,
le nom de la table ne le contient pas. Ils sont donc différents. Qu'est-ce
qui te chiffonne ?
Gilbert

"Patrice"
Bonjour,

A priori on tente plusieurs lectures en même temps sur une même connexion.

Dès la première exécution ? Qu'est ce que cela donne avec un
ContexteRegle.Dispose (bien placé pour qu'il soit toujours exécuté) ?

Cela n'a rien à voir mais les noms me paraissent un peu étranges (le nom
du contexte est le même que le nom de la table exposée par ce contexte ?)

--
Patrice

"Gilbert Tordeur" groupe de discussion :
Bonjour,

Lorsque je tente d'exécuter une instruction Linq pour lire une ligne
d'une table SQL, j'obtiens le message d'erreur suivant à l'exécution de
l'instruction "If LaRegle.Count < 1" :
InvalidOperationException : Un DataReader associé à cette commande est
déjà ouvert. Il doit d'abord être fermé.

Je ne comprends pas ce que ce message signifie. Voici mon code
ci-dessous. Quelqu'un a-t-il une idée ?

Merci d'avance,
Gilbert.

Private Function DeterminerRegleCautionBancaire(ByVal mntCautionBancaire
As Decimal _
, ByVal durCautionBancaire As Integer) As Boolean
DeterminerRegleCautionBancaire = False
Dim ContexteRegle As New
DoaReglesCautionBancaireDataContext(ObjSessionDivers.OpenFinance)
Dim LaRegle = From Regle In ContexteRegle.DoaReglesCautionBancaire _
Where ( _
(Regle.RebMntCautionBancaire >= mntCautionBancaire) _
And (regle.RebDurCautionBancaire >= durCautionBancaire) _
) _
Order By Regle.RebMntCautionBancaire Ascending _
, Regle.RebDurCautionBancaire Ascending _
Take 1

If LaRegle.Count < 1 Then
Alert.Show(String.Format(Msg018, "de la caution bancaire"))
Exit Function
End If

NumRegleCautionBancaire = LaRegle.First.RebNumRegle
LaRegle = Nothing
ContexteRegle = Nothing
DeterminerRegleCautionBancaire = True
End Function






Patrice
Le #16709811
> En ce qui concerne les noms : le nom du contexte comporte le mot Contexte,
le nom de la table ne le contient pas. Ils sont donc différents. Qu'est-ce
qui te chiffonne ?
Gilbert



Si tu utilises les noms par défaut cela voudrait dire que le nom de la table
présente dans ta base est le même que le nom de ta base. Ce n'est pas
spécialement interdit mais plutôt inhabituel d'autant plus que le nom de
contexte semble assez spécifique (je me serais attendu à qq chose de plus
général style GestionFinancièreDataContext).

Pour expliciter ma pensée je me demandais, si tu ne créais pas un contexte
par Table plutôt qu'un contexte par Base.

--
Patrice
Gilbert Tordeur
Le #16712871
Patrice,

Oui je crée un contexte par Table plutôt qu'un contexte par Base. En fait ça
fait 3-4 jours que je touche à Linq et je suis donc super débutant en ce
domaine. Tu veux dire qu'il est préférable de créer un seul contexte par
base, auquel se réfèreront toutes mes requêtes Linq ?

Tu connais un bon tutoriel ?

Gilbert

"Patrice"
En ce qui concerne les noms : le nom du contexte comporte le mot
Contexte, le nom de la table ne le contient pas. Ils sont donc
différents. Qu'est-ce qui te chiffonne ?
Gilbert



Si tu utilises les noms par défaut cela voudrait dire que le nom de la
table présente dans ta base est le même que le nom de ta base. Ce n'est
pas spécialement interdit mais plutôt inhabituel d'autant plus que le nom
de contexte semble assez spécifique (je me serais attendu à qq chose de
plus général style GestionFinancièreDataContext).

Pour expliciter ma pensée je me demandais, si tu ne créais pas un contexte
par Table plutôt qu'un contexte par Base.

--
Patrice



Publicité
Poster une réponse
Anonyme