2012-04-11 46 views
51

Estoy tratando de reemplazar el valor predeterminado de tiempo de espera de SqlConnection 15 segundos y estoy recibiendo un error que indica que la propiedadSqlConnection

o indexador no se pueden asignar, ya que es de sólo lectura.

¿Hay alguna forma de evitar esto?

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(); 
    } 
} 
+3

¿Quiere configurar un tiempo de espera de conexión después de intentar abrir la conexión? ¿te refieres a tiempo de comando? –

+0

Realmente, realmente no veo por qué hicieron la propiedad de solo lectura. Shoulda sido leído-escrito, IMO. –

+0

La propiedad es de solo lectura después de la conexión. Ver otras respuestas para discusión. ConnectionTimeout afecta el tiempo de espera cuando se intenta conectar. a menudo es útil aumentar esto para Azure SQL DB. CommandTimeout afecta el tiempo de espera cuando se ejecuta una consulta. –

Respuesta

107

Si desea proporcionar un tiempo de espera para una consulta en particular, entonces CommandTimeout es el camino a seguir.

Su uso es:

command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds. 
10

Siempre se puede añadir a la cadena de conexión:

connect timeout=180; 
+1

El tiempo de espera de conexión es diferente de CommandTimeout. Connection Timeout es la cantidad de tiempo que lleva resolver la conexión inicial a la base de datos. CommandTimeout cambia el período de tiempo de espera para la consulta en particular. – m0g

33

puede establecer el valor de tiempo de espera en la cadena de conexión, pero después de haber conectado Es de sólo lectura. Puede leer más en http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

Como implica Anil, ConnectionTimeout puede no ser lo que necesita; Controla cuánto esperará el controlador ADO al establecer una nueva conexión. Su uso parece indicar una necesidad de esperar más tiempo de lo normal para que se ejecute una consulta SQL en particular, y en ese caso Anil tiene toda la razón; use CommandTimeout (que es R/W) para cambiar el tiempo de finalización esperado para un SqlCommand individual.

3

Es necesario utilizar command.CommandTimeout

3

Puedes añadir Connection Timeout=180; a la cadena de conexión

+1

El tiempo de espera de conexión es diferente de CommandTimeout. Connection Timeout es la cantidad de tiempo que lleva resolver la conexión inicial a la base de datos. CommandTimeout cambia el período de tiempo de espera para la consulta en particular. – m0g

5

Mensaje viejo, pero como se trata de compensar lo que estaba buscando lo que me gustaría añadir algo de información a este tema. Iba a agregar un comentario pero no tengo suficiente representante.

Como han dicho otros:

connection.ConnectionTimeout se utiliza para la conexión inicial

command.CommandTimeout se utiliza para las búsquedas individuales, actualizaciones, etc.

Pero:

conexión .ConnectionTimeout es también utilizado para confirmar y revertir transacciones.

Sí, esta es una decisión de diseño absolutamente insana.

Por lo tanto, si se está ejecutando un tiempo de espera en la confirmación o restitución, deberá aumentar este valor a través de la cadena de conexión.

8

Una manera más limpia es establecer connectionString en un archivo xml, por ejemplo Web.Confing(WepApplication) o 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> 

Por código que puede obtener la conexión de esta manera:

public static SqlConnection getConnection() 
{ 
     string conn = string.Empty; 
     conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString; 
     SqlConnection aConnection = new SqlConnection(conn); 
     return aConnection; 
} 

Puede establecer ConnectionTimeout solamente se crea una instancia. Cuando la instancia es crear, no cambia este valor.

Cuestiones relacionadas