2009-08-30 46 views
24

Estoy usando VSTS 2008 + ADO.Net + C# + .Net 3.5 + SQL Server 2008. Estoy usando ADO.Net en el lado del cliente para conectarme al servidor de base de datos para ejecutar un procedimiento de tienda, luego regreso resultado del procedimiento de la tienda.Configuración de tiempo de espera para SQL Server

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

  1. Si no establece explícitamente ningún ajuste relacionado de 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 para una cierta cantidad predeterminada de tiempo, habrá alguna excepción de tiempo de espera?)?

  2. Si no establezco explícitamente 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 puede recuperar los resultados del servidor al cliente ADO.Net durante un período de tiempo predeterminado, habrá alguna excepción de tiempo de espera?)?

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

Respuesta

13

Sí, hay 2 tipos de tiempo de espera que se pueden establecer

  1. Connection timeout
  2. Command timeout

Tanto por defecto a 30 segundos en VBA, .net, etc.

+0

Th anks gbn!¿Qué tipo de excepción se arrojará o, en otras palabras, qué tipo de excepción deberíamos detectar en nuestro código para manejar el problema del tiempo de espera? – George2

+2

En SSMS, obtengo el "Tiempo de espera caducado. El tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde". Puedes probar usando WAITFOR DELAY '00: 00: 40 'para forzar una espera de 40 segundos y una excepción para el tiempo de espera de Command. Para el tiempo de espera de conexión, puede inventar un nombre de servidor e intentar conectarse. – gbn

+0

Gracias, para el tiempo de espera del comando, ¿qué tipo de excepción debe detectarse? – George2

40

Como gbn ya se ha mencionado, hay dos tipos de tiempos de espera:

1) Tiempo de espera de conexión: esto es controlado por 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 será tratar durante 120 segundos para abrirse y luego aborta.

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

2) límite de comando: para cada comando, también puede especificar un tiempo de espera - ADO.NET va a esperar a que la cantidad de tiempo antes de cancelar a cabo la consulta. Se especifica que en el objeto SqlCommand:

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

También podría ser digno de mención que para incluir el parámetro 'Connect Timeout' en la cadena de conexión también controla el tiempo de espera para el método SqlTransaction.Commit –

+0

Gracias Marc, ¿qué tipo de excepción será lanzado o en otras palabras, qué tipo de excepción debemos atrapar en nuestro código para manejar el problema de tiempo de espera? – George2

+0

Gracias Philip, ¿quieres decir que además del tiempo de espera de conexión y el tiempo de espera de comando, hay un tercer tipo de tiempo de espera llamado tiempo de espera de transacción? – George2

0

En la clase SQLConnection hay una propiedad por su nombre "ConnectionTimeout" .Esta no se puede utilizar directamente para ajustar el valor de tiempo de espera de conexión deseado, ya que es de sólo lectura es decir, sólo "obtener" se implementa & "set" no está implementado en esta propiedad. Por lo tanto, tenemos que usar la palabra clave "Connection Timeout" en la cadena de conexión misma & para establecer el valor deseado.

EXI: "Data Source = (local); Initial Catalog = AdventureWorks; Integrado de Seguridad = SSPI; Conexión Tiempo de espera = 30"; (30 significa 30 segundos)

30 segundos es el tiempo máximo dado para establecer conexión al servidor (como 172.160.0.2 O algo así como ADMINISTRATOR \ SQLEXPRESS). Si no pudo establecer conexión de inmediato con el servidor, intentará hasta 30 segundos. Si el servidor es válido, & puede conectarse al servidor & si databse name o las credenciales de inicio de sesión no son válidas, este tiempo de espera no será aplicable. Inmediatamente lanza una excepción para credenciales o bases de datos no válidas

Cuestiones relacionadas