Vb dot net perd la connexion vers sql server

Résolu
hajerOnward Messages postés 22 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 17 novembre 2009 - 16 nov. 2009 à 14:30
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 - 17 nov. 2009 à 10:00
j'ai un lot de requête (300 requête) qui s'exécutent successivement sur Sql server 2005 en utilisant le SqlClient de vb dot net. mais quand il s'agit d'un grand lot de données (1 200 000 lignes) le vb dot net bugue et il m'affiche le message "Erreur SQL ExecuteNonQuery nécessite une connexion ouverte et disponible" sachant que le service sql server est toujours lancé!

16 réponses

cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 14:34
Salut,

J4ai eu ce problème, il va falloir que tu gère les requettes en y mettant une deconnection et reconnection toutes les n lignes

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
3
hajerOnward Messages postés 22 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 17 novembre 2009
16 nov. 2009 à 16:26
dsl mais ta réponse n'est pas précise.
j'ai fait un Timeout=0 mais toujours je perd la connexion
3
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 16:30
En fait je te proposait d'éclater ta requette en Vues, et function.

Les vues te feront gagner du temps car la requette n'est pas à analyser vu qu'elle est déjà validée.

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
3
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
17 nov. 2009 à 09:33
Juste pour être d'accord, quand tu dis :

je lance toujours mes requêtes dans un thread à part


Tu utilise le mode asynchrone de ton SqlCommand ou tu créer toi même un nouveau Thread via la class System ?

Car l'un gère ce genre de pb 'normalement' mais pas l'autre

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
17 nov. 2009 à 09:36
Sinon il faudrat éxécuter ta requette dans SQL Server directement


Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
3
hajerOnward Messages postés 22 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 17 novembre 2009
16 nov. 2009 à 16:07
je peux pas! j'ai une requête (avec des tables temp,....) très compliquée qui dépend de toutes les lignes!!
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 16:15
tout dépend de ce que fait ta requette...

Il faut peut-être fragmenté des requettes afin qu'elle libère la RAM utiliser dès qu'elles ont finies, exemple en faisant des requettes pour créer des vues, puis des fonctions qui vont chercher ci et ça et qui une fois utiliser videront la RAM.

oups je me suis égarer.
Si j'ai bien piger tu a 1 requette qui mouline des heures puis te donne : connectio perdue en gros.

et si tu augmente le delais d'attente ?
je sais aussi qu'il existe une commande qui permet de retourner des résultats dès qu'il y en a plutôt que d'attendre que la requette soit finie ou que les tampons soit pleins

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
hajerOnward Messages postés 22 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 17 novembre 2009
16 nov. 2009 à 17:16
Merci Chris,
je vois que c'est une solution! mais elle reste théorique parce que c'est très difficile de mettre à jour 300 requête avec des procédures, des fonctions, des temp,....
mais à voir! je vais essayer
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 21:02
Si tu as 300 requettes, rien ne t'empêche de faire un Connection.Close() puis un Connection.Open() entre 2

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
16 nov. 2009 à 21:26
Ou alors d'utiliser le mode asynchrone afin de le laisser travailler et quand y'a un retour de ta requette tu passe à la suivante, etc... ce qui devrait t'éviter la gestion de timeout


Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
hajerOnward Messages postés 22 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 08:34
biensur que je fais un conection.close et connection.open entre les 2! et je lance toujours mes requêtes dans un thread à part! mais toujours je perd la connexion!


Hajjoura
0
hajerOnward Messages postés 22 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 09:41
je crée moi moi même un thread via la class system, il y a une différence? sinon, comment je peux utiliser le mode asynchrone de SqlCommand ?
merci!
Hajjoura
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
17 nov. 2009 à 09:55
Regarde par exemple pour le BeginExecuteNonQuery()

il existe aussi la même chose pour tout les autres : BeginExecuteReader(), BeginExecuteXMLReader()

Il faudrat lui spécifier une procedure de retour.
Genre Begin...(Retour) ou Retour est une IASync qui sera appeler quand la requette aura terminée, du coup cela te fait un foul-disconnected.

Si tu créer un Thread, il va gérer ta requette comme si tu l'éxécutait directement à la différence qu'il te rend la main, alors que l'Asynchrone va complètement se libérer du serveur et l'appli attendra le temps qu'il faut (tu peux gérer le timeout de retour)

Pour imaginer la chose, c'est pile poil comme les sites de vente de billets d'avion, il y a des recherches sur différents fournisseur AF, RAM, etc... et pour chaque site l'on appel un Async qui une fois terminé appelera la fameuse Retour : D'où jamais de TimeOut même si la recherche de billet dure 5 min ou plus. et s'il n'y a pas de retour, cela ne gène pas le site car il continu de fonctionner

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
17 nov. 2009 à 09:55
j'ai oublier l'URL


Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
17 nov. 2009 à 09:57
En plus je bois (et dès le matin moi), je me suis tromper d'URL, c'est celle-ci ici

L'autre concerne le Begin mais sans retour de données

Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
17 nov. 2009 à 10:00
ou pour simplifier la doc :

public Sub MySub(...)
Dim callback As New AsyncCallback(AddressOf HandleCallback)
command.BeginExecuteNonQuery(callback, command)
End Sub

Private Sub HandleCallback(ByVal result As IAsyncResult)
Dim command As SqlCommand = CType(result.AsyncState, SqlCommand)
Dim rowCount As Integer = command.EndExecuteNonQuery(result)
Dim rowText As String = " rows affected."
End Sub


Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0