J'essaie de remplacer le délai d'attente par défaut de SqlConnection
de 15 secondes et j'obtiens une erreur indiquant que le
la propriété ou l'indexeur ne peut pas être attribué car il est en lecture seule.
Y a-t-il un moyen de contourner ceci?
using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
connection.ConnectionTimeout = 180; // This is not working
command.CommandText = "sproc_StoreData";
command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID);
command.Parameters.AddWithValue("@AsOfDate", order.IncurDate);
command.ExecuteNonQuery();
}
}
Si vous souhaitez fournir un délai d'attente pour une requête particulière, alors CommandTimeout est la voie à suivre.
Son utilisation est:
command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.
Vous pouvez définir la valeur de délai d'attente dans la chaîne de connexion, mais une fois la connexion établie, il est en lecture seule. Vous pouvez en savoir plus à l’adresse http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx
Comme Anil l’implique, ConnectionTimeout peut ne pas être ce dont vous avez besoin; il contrôle la durée pendant laquelle le pilote ADO attendra lors de l'établissement d'une nouvelle connexion. Votre utilisation semble indiquer qu'il est nécessaire d'attendre plus longtemps que la normale l'exécution d'une requête SQL particulière. Dans ce cas, Anil est Exactement, utilisez CommandTimeout (R/W) pour modifier l’heure de fin prévue pour un SqlCommand individuel.
Vous pouvez toujours l'ajouter à votre chaîne de connexion:
connect timeout=180;
Une méthode plus simple consiste à définir connectionString dans un fichier XML, par exemple Web.Confing(WepApplication)
ou App.Config(StandAloneApplication)
.
<connectionStrings>
<remove name="myConn"/>
<add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/>
</connectionStrings>
Par code, vous pouvez obtenir une connexion de cette façon:
public static SqlConnection getConnection()
{
string conn = string.Empty;
conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
SqlConnection aConnection = new SqlConnection(conn);
return aConnection;
}
Vous pouvez définir ConnectionTimeout
uniquement lorsque vous créez une instance. Lorsque l'instance est créée, vous ne changez pas cette valeur.
Vous pouvez ajouter Connection Timeout=180;
à votre chaîne de connexion
Ancien post, mais comme il se présente pour ce que je cherchais, j'ai pensé ajouter quelques informations à ce sujet. J'allais ajouter un commentaire mais je n'ai pas assez de représentant.
Comme d'autres l'ont dit:
connection.ConnectionTimeout est utilisé pour la connexion initiale
command.CommandTimeout est utilisé pour des recherches individuelles, des mises à jour, etc.
Mais:
connection.ConnectionTimeout est aussi utilisé pour la validation et l'annulation des transactions.
Oui, c'est une décision de conception absolument folle.
Ainsi, si vous rencontrez un délai d'expiration lors de la validation ou de l'annulation, vous devez augmenter cette valeur via la chaîne de connexion.
Vous devez utiliser command.CommandTimeout
Vous pouvez également utiliser le SqlConnectionStringBuilder
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
// code goes here
}
Vous pouvez définir le délai de connexion en fonction du niveau de connexion et du niveau de commande.
Ajoutez "Connection Timeout = 10" à la chaîne de connexion. Le délai de connexion est maintenant de 10 secondes.
var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10";
using (var con = new SqlConnection(connectionString))
{
}
Définissez la propriété of CommandTimeout sur SqlCommand
var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword";
using (var con = new SqlConnection(connectionString))
{
using (var cmd =new SqlCommand())
{
cmd.CommandTimeout = 10;
}
}