c# .net sql-server visual-studio-2008 ado.net

c# - Configuración de tiempo de espera para SQL Server



.net sql-server (3)

Como ya se mencionó, hay dos tipos de tiempos de espera:

1) Tiempo de espera de conexión: esto se controla mediante la cadena de conexión:

Data Source=.;Initial Catalog=TestDB; Trusted_Connection=true;Asynchronous Processing=true

Si agrega un Connect Timeout=120 a esta cadena, su conexión intentará abrirse durante 120 segundos y luego se cancelará.

Data Source=.;Initial Catalog=TestDB; Trusted_Connection=true;Asynchronous Processing=true; Connect Timeout=120;

2) Tiempo de espera del comando: para cada comando, también puede especificar un tiempo de espera: ADO.NET esperará esa cantidad de tiempo antes de cancelar su consulta. Usted especifica que en el objeto SqlCommand:

using (SqlCommand RetrieveOrderCommand = new SqlCommand()) { RetrieveOrderCommand.CommandTimeout = 150; }

Estoy utilizando VSTS 2008 + ADO.Net + C # + .Net 3.5 + SQL Server 2008. Estoy utilizando ADO.Net en el lado del cliente para conectarme al servidor de la base de datos para ejecutar un procedimiento de almacenamiento y luego devolver el resultado del procedimiento de almacenamiento.

Aquí está mi código. Tengo dos problemas sobre el tiempo de espera,

  1. Si no configuro de forma explícita ninguna configuración relacionada con el tiempo de espera, para la conexión al servidor de base de datos, ¿hay alguna configuración de tiempo de espera (por ejemplo, si no se puede conectar al servidor de base de datos por un tiempo predeterminado, habrá alguna excepción de tiempo de espera?)?

  2. Si no configuro de forma explícita ninguna configuración relacionada con el tiempo de espera, para la ejecución del procedimiento de almacenamiento, ¿hay alguna configuración de tiempo de espera (por ejemplo, si no se pueden recuperar los resultados del servidor al cliente ADO.Net por un período de tiempo predeterminado, habrá algún tiempo de espera) ¿excepción?)?

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


En la clase sqlconnection , hay una propiedad por nombre ConnectionTimeout .

Esto no se puede usar directamente para establecer el valor de tiempo de espera de conexión deseado, ya que es de solo lectura, es decir, solo se implementa "get" y "set" no se implementa en esta propiedad. Por lo tanto, tenemos que usar la palabra clave "Tiempo de espera de conexión" en la propia cadena de conexión & set el valor deseado.

exi:

Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;Connection Timeout=30";(30 means 30 seconds)

30 segundos es el tiempo máximo dado para establecer la conexión con el servidor (como 172.160.0.2 O algo como ADMINISTRATOR//SQLEXPRESS ). Si no puede establecer la conexión con el servidor de inmediato, intentará hasta 30 segundos.

Si el servidor es válido y es capaz de conectarse al servidor y si el nombre de la base de datos o las credenciales de inicio de sesión no son válidas, este tiempo de espera no será aplicable. Inmediatamente arroja una excepción para las credenciales o la base de datos no válidas