Oracle
 sql >> Base de données >  >> RDS >> Oracle

Délai d'expiration de la commande Oracle

Vous n'avez pas plusieurs commandes en cours d'exécution sur la connexion, vous avez deux commandes exécutées séquentiellement, l'une après l'autre. Lorsque la première commande expire, aucune autre commande n'est en attente sur la connexion. Votre code ne soumet pas la deuxième commande pour exécution tant que la première commande n'a pas réussi ou a levé une exception.

Le dernier paragraphe de la documentation que vous avez citée doit se lire :Dans une situation où plusieurs objets OracleCommand utilisent la même connexion simultanément , ...

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