2008-08-26 5 views
24

J'ai une instruction SQL longue durée que je veux exécuter, et peu importe ce que je mets dans la clause "timeout =" de ma chaîne de connexion, elle semble toujours se terminer après 30 secondes.Le délai d'expiration n'est pas respecté dans la chaîne de connexion

Je suis juste en utilisant SqlHelper.ExecuteNonQuery() pour l'exécuter, et de le laisser prendre soin des connexions d'ouverture, etc.

Y at-il quelque chose d'autre qui pourrait être PRÉPONDÉRANTS mon délai d'attente, ou de causer serveur SQL pour l'ignorer? J'ai exécuté profiler sur la requête, et la trace ne semble pas différente quand je l'exécute dans le studio de gestion, par rapport à mon code.

Le studio de gestion complète la requête en environ une minute, mais même avec un délai d'attente de 300 ou 30000, mon code expire après 30 secondes.

Répondre

38

Qu'est-ce que vous utilisez pour définir le délai d'attente dans votre chaîne de connexion? De la mémoire qui est "ConnectionTimeout" et affecte seulement le temps qu'il faut réellement connecter au serveur.

Chaque commande individuelle a un "CommandTimeout" séparé qui serait ce que vous cherchez. Je ne sais pas comment SqlHelper implémente cela.

+1

Tellement évident! Mais cela ne m'a pas empêché de perdre deux heures à manquer la réponse ... Merci! – Aaron

14

En plus du délai d'attente dans la chaîne de connexion,, essayez d'utiliser la propriété timeout de la commande SQL. Voici un exemple C#, utilisant la classe SqlCommand. Son équivalent devrait être applicable à ce que vous utilisez.

SqlCommand command = new SqlCommand(sqlQuery, _Database.Connection); 
command.CommandTimeout = 0; 
int rows = command.ExecuteNonQuery(); 
Questions connexes