Oracle
 sql >> Datenbank >  >> RDS >> Oracle

OracleCommand-Timeout

Sie haben nicht mehrere Befehle, die auf der Verbindung ausgeführt werden, Sie haben zwei Befehle, die sequentiell nacheinander ausgeführt werden. Wenn der erste Befehl abläuft, ist kein weiterer Befehl für die Verbindung anhängig. Ihr Code sendet den zweiten Befehl erst zur Ausführung, nachdem der erste Befehl entweder erfolgreich war oder eine Ausnahme ausgelöst hat.

Der letzte Absatz aus der von Ihnen zitierten Dokumentation sollte lauten:In einer Situation, in der mehrere OracleCommand-Objekte gleichzeitig dieselbe Verbindung verwenden , ...

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