sql >> Base de Datos >  >> RDS >> Oracle

Tiempo de espera de OracleCommand

No tiene múltiples comandos ejecutándose en la conexión, tiene dos comandos ejecutándose secuencialmente, uno tras otro. Cuando se agota el tiempo de espera del primer comando, no hay ningún otro comando pendiente en la conexión. Su código no envía el segundo comando para su ejecución hasta después de que el primer comando haya tenido éxito o haya generado una excepción.

El último párrafo de la documentación que citó debería decir:En una situación en la que varios objetos OracleCommand usan la misma conexión simultáneamente , ...

static void Main(string[] args)
{
    using (var conn = new OracleConnection("Pooling=False;...")) // why?
    using (var cmd1 = conn.CreateCommand())
    using (var cmd2 = conn.CreateCommand())
    {
        cmd1.CommandText = "UPDATE employee SET empname = 'temp1' WHERE id = 1";
        cmd2.CommandText = "UPDATE employee SET empname = 'temp2' WHERE id = 2";
        cmd1.CommandTimeout = 30;
        cmd2.CommandTimeout = 30;

        conn.Open();

        // there are no commands on conn yet

        try { cmd1.ExecuteNonQuery(); } // cmd1 is the only command on conn
        catch (OracleException) { } // if timeout, no other command affected

        // cmd1 is no longer on conn

        try { cmd2.ExecuteNonQuery(); } // cmd2 is the only command on conn
        catch (OracleException) { } // if timeout, no other command affected

        // cmd2 is no longer on conn
    }
}