web-dev-qa-db-fra.com

Modification du délai d'attente SqlConnection

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();
    }
}
69
Haymak3r

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.
136
Anil Mathew

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.

37
KeithS

Vous pouvez toujours l'ajouter à votre chaîne de connexion:

connect timeout=180;
16
Justin Niessner

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.

15
daniele3004

Vous pouvez ajouter Connection Timeout=180; à votre chaîne de connexion

7
Horev Ivan

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.

6
Nick Thompson

Vous devez utiliser command.CommandTimeout

2
LewisT

Vous pouvez également utiliser le SqlConnectionStringBuilder

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
    // code goes here
}
1
Kelvin

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;
    }

}
0
Jakir Hossain