J'utilise VSTS 2008 + ADO.Net + C # + .Net 3.5 + SQL Server 2008. J'utilise ADO.Net côté client pour me connecter au serveur de base de données pour exécuter une procédure de stockage, puis retourner le résultat de la procédure de stockage.
Voici mon code. J'ai deux problèmes concernant le délai d'attente,
Si je ne définis pas explicitement de paramètres liés au délai d'attente, pour la connexion au serveur de base de données, y a-t-il des paramètres de délai d'attente (par exemple, si je ne peux pas me connecter au serveur de base de données pendant un certain temps par défaut, il y aura une exception de délai d'attente?)?
Si je ne définis pas explicitement de paramètres liés au délai d'expiration, pour l'exécution de la procédure de stockage, y a-t-il des paramètres de délai d'expiration (par exemple, si je ne peux pas récupérer les résultats du serveur vers le client ADO.Net pendant un certain temps par défaut, il y aura un certain délai d'expiration 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 RetrieveOrderCommand = new SqlCommand())
{
RetrieveOrderCommand.Connection = currentConnection;
RetrieveOrderCommand.CommandType = CommandType.StoredProcedure;
RetrieveOrderCommand.CommandText = "prc_GetOrders";
RetrieveBatchCountCommand.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output;
RetrieveBatchCountCommand.ExecuteNonQuery();
int rowCount = Convert.ToInt32(RetrieveOrderCommand.Parameters["@Count"].Value);
}
}
Comme gbn l'a déjà mentionné, il existe deux types de délais:
1) Délai d'expiration de la connexion: ceci est contrôlé par votre chaîne de connexion:
Data Source=.;Initial Catalog=TestDB;
Trusted_Connection=true;Asynchronous Processing=true
Si vous ajoutez un Connect Timeout=120
à cette chaîne, votre connexion essaiera de s'ouvrir pendant 120 secondes puis s'interrompra.
Data Source=.;Initial Catalog=TestDB;
Trusted_Connection=true;Asynchronous Processing=true;
Connect Timeout=120;
2) Délai d'expiration de la commande: pour chaque commande, vous pouvez également spécifier un délai d'expiration - ADO.NET attendra ce délai avant d'annuler votre requête. Vous spécifiez que sur l'objet SqlCommand:
using (SqlCommand RetrieveOrderCommand = new SqlCommand())
{
RetrieveOrderCommand.CommandTimeout = 150;
}
Oui, il existe 2 types de délais d'attente qui peuvent être définis
Les deux par défaut à 30 secondes dans VBA, .net, etc.
Dans la classe sqlconnection
, il existe une propriété nommée ConnectionTimeout
.
Cela ne peut pas être utilisé directement pour définir la valeur de délai de connexion souhaitée car il est en lecture seule, c'est-à-dire que "get" est implémenté et "set" n'est pas implémenté sur cette propriété. Nous devons donc utiliser le mot clé "Connection Timeout" dans la chaîne de connexion elle-même la valeur souhaitée.
exi:
Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;Connection Timeout=30";(30 means 30 seconds)
30 secondes est le temps maximum accordé pour établir la connexion au serveur (comme 172.160.0.2
OR quelque chose comme ADMINISTRATOR\\SQLEXPRESS
). S'il n'a pas pu établir immédiatement la connexion au serveur, il essaiera jusqu'à 30 secondes.
Si le serveur est valide et peut se connecter au serveur et si le nom de la base de données ou les informations de connexion ne sont pas valides, ce délai ne sera pas applicable.Il déclenche immédiatement une exception pour les informations de connexion ou la base de données non valides