接続で複数のコマンドを実行しているわけではありません。2つのコマンドを順番に実行しています。最初のコマンドがタイムアウトすると、接続で保留中の他のコマンドはありません。コードは、最初のコマンドが成功するか、例外をスローするまで、実行のために2番目のコマンドを送信しません。
引用したドキュメントの最後の段落は次のようになります。複数のOracleCommandオブジェクトが同じ接続を同時に使用する状況 、...
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
}
}