Параметр TImeout не работает для хранимой процедуры Oracle, вызываемой из C # .net Console App - PullRequest
0 голосов
/ 02 октября 2019

У меня есть приложение C #, которое вызывает хранимую процедуру Oracle. Обычное время выполнения хранимой процедуры составляет 2 минуты (оценка). Теперь, если выполнение хранимой процедуры превышает время ожидания команды (которое я установил на 60 секунд = 1 мин), то оно должно завершиться сбоем, но оно не падает на него.

Когда я запускаю приведенный ниже код без установки commandtimeout, заканчивается без проблем. Но когда я устанавливаю значение commandtimeout, выполнение хранимой процедуры Oracle не прекращается.

Пожалуйста, не могли бы вы мне помочь или предложить в этом вопросе?

Спасибо за вашу помощь вadvance.

Я искал в Интернете и обнаружил, что мне нужно включить приведенный ниже конфиг в мою app.config для библиотеки доступа к управляемым данным Oracle. Но все равно это не помогло.

  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="Disable_Oob" value="on" />
      </settings>
    </version>
  </oracle.manageddataaccess.client>

Ниже приведен код на C #, который я пытаюсь проверить на ORACLE TIMEOUT

public void OracleConnTimeoutTest()
{
    string oralceConnStr = ConfigurationManager.ConnectionStrings["<CONNECTION STRING>"].ConnectionString;
    OracleConnection oraConnection = new OracleConnection(oralceConnStr);

    OracleCommand oraCmd = new OracleCommand();
    oraCmd.Connection = oraConnection;

    // Stored procedure execution
    oraCmd.CommandText = "TESTDBCONNSQL";
    oraCmd.CommandType = CommandType.StoredProcedure;

    try
    {
        oraConnection.Open();

        // WHEN I SET THE COMMANDTIMEOUT = 60 sec
        // oraCmd.CommandTimeout = 60;
        int result = oraCmd.ExecuteNonQuery();

        // Stored procedure return success or failure
        var spResult = oraCmd.Parameters["Output_Value"].Value;
    }
    catch (Exception ex)
    {
        System.Console.WriteLine("Exception: {0}", ex.ToString());
    }
}
...