Question

J'ai une instruction SQL de longue durée que je souhaite 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.

j'utilise juste SqlHelper.ExecuteNonQuery() pour l'exécuter, et le laisser s'occuper de l'ouverture des connexions, etc.

Y a-t-il autre chose qui pourrait annuler mon délai d'attente ou amener le serveur SQL à l'ignorer ?J'ai exécuté le profileur sur la requête et la trace n'est pas différente lorsque je l'exécute dans Management Studio et dans mon code.

Management Studio termine la requête en une minute environ, mais même avec un délai d'attente défini sur 300 ou 30 000, mon code expire toujours après 30 secondes.

Était-ce utile?

La solution

Qu'utilisez-vous pour définir le délai d'attente dans votre chaîne de connexion ?De mémoire, c'est "ConnectionTimeout" et cela n'affecte que le temps nécessaire pour réellement connecter au serveur.

Chaque commande individuelle a un "CommandTimeout" distinct qui correspond à ce que vous recherchez.Je ne sais pas comment SqlHelper implémente cela.

Autres conseils

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

SqlCommand command = new SqlCommand(sqlQuery, _Database.Connection);
command.CommandTimeout = 0;
int rows = command.ExecuteNonQuery();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top