Délai d'expiration pour SQL Server

J'utilise VSTS 2008 + ADO.Net + C # + .Net 3.5 + SQL Server 2008. J'utilise ADO.Net du côté client pour me connecter au server de database pour exécuter une procédure de magasin, puis renvoyer le résultat de la procédure de magasin.

Voici mon code. J'ai deux problèmes concernant le timeout,

  1. Si je ne définis pas explicitement les parameters liés au timeout, pour la connection au server de database, existe-t-il des parameters de timeout (par exemple, si le server de database ne peut pas se connecter au server de database par défaut)?

  2. Si je ne définis pas explicitement les parameters relatifs à la temporisation, pour l'exécution de la procédure de stockage, existe-t-il des parameters de timeout (par exemple, si les résultats du server vers le client ADO.Net ne peuvent pas être récupérés)? exception?)?

    using (SqlConnection currentConnection = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Trusted_Connection=true;Asynchronous Processing=true")) { // check current batch conut currentConnection.Open(); using (SqlCommand ResortingeveOrderCommand = new SqlCommand()) { ResortingeveOrderCommand.Connection = currentConnection; ResortingeveOrderCommand.CommandType = CommandType.StoredProcedure; ResortingeveOrderCommand.CommandText = "prc_GetOrders"; ResortingeveBatchCountCommand.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output; ResortingeveBatchCountCommand.ExecuteNonQuery(); int rowCount = Convert.ToInt32(ResortingeveOrderCommand.Parameters["@Count"].Value); } } 

Comme gbn déjà mentionné, il existe deux types de timeouts d'attente:

1) Timeout de connection: ceci est contrôlé par votre string de connection:

 Data Source=.;Initial Catalog=TestDB; Trusted_Connection=true;Asynchronous Processing=true 

Si vous ajoutez un Connect Timeout=120 à cette string, votre connection essaiera pendant 120 secondes pour s'ouvrir, puis abandonnera.

 Data Source=.;Initial Catalog=TestDB; Trusted_Connection=true;Asynchronous Processing=true; Connect Timeout=120; 

2) Expiration de la command: pour chaque command, vous pouvez également spécifier un timeout d'attente – ADO.NET attendra ce laps de time avant d'annuler votre requête. Vous spécifiez cela sur l'object SqlCommand:

  using (SqlCommand ResortingeveOrderCommand = new SqlCommand()) { ResortingeveOrderCommand.CommandTimeout = 150; } 

Oui, il y a 2 types de timeout qui peuvent être réglés

  1. Délai de connection dépassé
  2. Délai d'expiration de la command

Les deux par défaut à 30 secondes dans VBA, .net etc

Dans la class sqlconnection, il existe une propriété nommée "ConnectionTimeout". Elle ne peut pas être directement utilisée pour définir la valeur de timeout de la connection car elle est en lecture seule, c'est-à-dire que "get" est implémenté. utilisez le mot-key "Connection Timeout" dans la string de connection elle-même et définissez la valeur désirée.

exi: "Source de données = (local); Catalogue initial = AdventureWorks; Sécurité embeddede = SSPI; Connection Timeout = 30"; (30 signifie 30 secondes)

30 secondes est le time maximum donné pour établir la connection au server (comme 172.160.0.2 ou quelque chose comme ADMINISTRATEUR \ SQLEXPRESS) .Si il n'a pas pu établir immédiatement la connection au server, alors il essayera jusqu'à 30 secondes. Si le server est valide et est capable de se connecter au server et si le nom de la database ou les informations de connection ne sont pas valides, alors ce timeout ne sera pas applicable.Il jette immédiatement l'exception pour les credentails invalides ou la database