Тайм-аут оператора ODP .NET при запросе на обновление - PullRequest
2 голосов
/ 24 сентября 2019

Проблема:

По сути, оператор обновления ждет бесконечно ( ExecuteNonQueryAsync () ) по некоторым причинам. Вставка работает просто отлично, я пытался жестко закодировать простое заявление об обновлении с жестко заданными параметрами (без слияние ), та же история, даже пыталсяудалить , где предложение и обновить все строки, опять та же проблема.

После установки commandTimeout в 1 с мне удалось идентифицировать TimeoutException , почему это происходит?Понятия не имею.

Редактировать: Поворот сюжета.Теперь у меня есть случайные успешные обновления, что ошеломляет меня еще больше.Я пробовал в основном каждый возможный сценарий, который мог придумать, чтобы идентифицировать любые шаблоны, находящиеся в проблеме, мой единственный вывод заключается в том, что частота успеха обновлений абсолютно случайна ...

Тем не менее вставки работают нормально.


Это упрощенная часть кода.

public class CipCheckRepository : ICipCheckRepository
{
    private string connectionString = "Data Source=****;User Id=****;PASSWORD=****;Persist Security Info=True;";

    public CipCheckRepository()
    {}

    public async Task InsertOrUpdate(CipCheck cipCheck)
    {
        using (var uow = new UnitOfWork(connectionString))
        {
            using (var cmd = uow.CreateCommand())
            {
                cmd.CommandText = @"
                    MERGE INTO test
                    USING dual
                        ON (id = :CAD_ID)
                    WHEN MATCHED THEN
                        UPDATE SET value = :ISRA_NUMBER
                    WHEN NOT MATCHED THEN
                        INSERT
                        (
                            id,
                            value
                        )
                            VALUES
                        (
                            :CAD_ID,
                            :ISRA_NUMBER
                        )";

                cmd.Parameters.AddWithValue("CAD_ID", 1);
                cmd.Parameters.AddWithValue("ISRA_NUMBER", cipCheck.IsraNumber);

                cmd.CommandTimeout = 1;

                try
                {
                    await cmd.ExecuteNonQueryAsync();
                }
                catch (OracleException ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
            }
        }
    }

UnitOfWork класс создан для вопросов абстракции.

Как определить причину никогдазапрос и какие шаги можно предпринять, чтобы его предотвратить?

1 Ответ

1 голос
/ 25 сентября 2019

Кажется, что я каким-то образом заблокировал таблицу, после фиксации всех операторов через Oracle Developer, причуды исчезли.

enter image description here

...