webservice valor tiempo solicitud para operación expiró excedió esta espera ejecución consulta commandtimeout caducado aumentar agotó agotado c# .net sql timeout

c# - valor - Cómo extender el tiempo de espera de una consulta SQL



tiempo de espera agotado para esta solicitud sql server (6)

Este no es un tiempo de espera de conexión ya que la conexión a la base de datos está bien. El problema es que el procedimiento almacenado que llamo lleva más tiempo que, por ejemplo, 30 segundos y causa un tiempo de espera.

El código de la función se ve así:

SqlDatabase db = new SqlDatabase(connectionManager.SqlConnection.ConnectionString); return db.ExecuteScalar(Enum.GetName(typeof(StoredProcs), storedProc), parameterValues);

La llamada ExecuteScalar se está agotando. ¿Cómo puedo extender el período de tiempo de espera de esta función?

Para procedimientos almacenados rápidos, funciona bien. Pero, una de las funciones demora un tiempo y la llamada falla. Parece que no puedo encontrar ninguna manera de extender el período de tiempo de espera cuando la función ExecuteScalar se llama de esta manera.


Creo que esta podría ser una mejor manera de hacerlo (a partir de Enterprise Library 6.0):

SqlDatabase db = new SqlDatabase(connectionManager.SqlConnection.ConnectionString); System.Data.Common.DbCommand cmd = db.GetStoredProcCommand(storedProc, parameterValues); cmd.CommandTimeout = 600; return db.ExecuteScalar(cmd);



Mladen tiene razón, pero si tiene que hacer esto, probablemente tenga un problema mayor con el proceso en sí. Bajo carga puede tomar mucho más tiempo que su nuevo tiempo de espera. Podría valer la pena gastar un poco de tiempo de calidad con el proceso para optimizar.



Prueba este

SqlConnectionStringBuilder connectionStringBuilder = new SqlConnectionStringBuilder(connection.ConnectionString); connectionStringBuilder.ConnectTimeout = 180; connection.ConnectionString = connectionStringBuilder.ConnectionString; connection.Open(); SqlCommand command = new SqlCommand("sp_ProcedureName", connection); command.CommandType = CommandType.StoredProcedure; command.CommandTimeout = connection.ConnectionTimeout; command.ExecuteNonQuery(); connection.Close();


Si está utilizando EnterpriseLibrary (y parece que lo es) intente esto:

Microsoft.Practices.EnterpriseLibrary.Data.Database db = Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase("ConnectionString"); System.Data.Common.DbCommand cmd = db.GetStoredProcCommand("StoredProcedureName"); cmd.CommandTimeout = 600; db.AddInParameter(cmd, "ParameterName", DbType.String, "Value"); // Added to handle paramValues array conversion foreach (System.Data.SqlClient.SqlParameter param in parameterValues) { db.AddInParameter(cmd, param.ParameterName, param.SqlDbType, param.Value); } return cmd.ExecuteScalar();

Editado para manejar la matriz paramValues ​​directamente en función de los comentarios. También incluí tu valor ConnectionString:

Microsoft.Practices.EnterpriseLibrary.Data.Database db = Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase(connectionManager.SqlConnection.ConnectionString); System.Data.Common.DbCommand cmd = db.GetStoredProcCommand("StoredProcedureName", parameterValues); cmd.CommandTimeout = 600; return cmd.ExecuteScalar();