Oracle
 sql >> Database >  >> RDS >> Oracle

Timeout del comando Oracle

Non hai più comandi in esecuzione sulla connessione, hai due comandi in esecuzione in sequenza, uno dopo l'altro. Quando il primo comando scade, non c'è nessun altro comando in sospeso sulla connessione. Il tuo codice non invia il secondo comando per l'esecuzione fino a quando il primo comando non è riuscito o ha generato un'eccezione.

L'ultimo paragrafo della documentazione che hai citato dovrebbe essere:In una situazione in cui più oggetti OracleCommand utilizzano la stessa connessione contemporaneamente , ...

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