DbCommand.ExecuteNonQuery зависает бесконечно

Я пытался выполнить запрос вставки для таблицы в моей базе данных Oracle. ниже тест, который я делаю.

  1. Сначала заблокируйте таблицу, в которую я хочу сделать вставку из сеанса разработчика SQL

    lock table RANDOM_TABLE in exclusive mode nowait
    
  2. Попробуйте запустить вставку, используя DbCommand.ExecuteNonQuery
  3. У меня свойство CommandTimeout установлено на 60 секунд

Даже после завершения 60 секунд элемент управления не возвращался, но когда я разблокировал таблицу, он выполняет вставку, а также выдает исключение.

Я понял, что.NET правильно выдает исключение, когда истекает время ожидания команды, но контроль не возвращался из собственного кода, пока таблица не будет разблокирована. Как избежать неопределенного ожидания в этой ситуации?

 Public Shared Function ExecuteNonQuery(ByVal ConnectionString As String, ByVal factory As DbProviderFactory, ByVal sql As String) As Integer

    Dim rowsAffected As Integer = -1

    Using conn As DbConnection = factory.CreateConnection
        conn.ConnectionString = ConnectionString
        conn.Open()
        If conn.State.Equals(ConnectionState.Open) Then

            Try
                'This works
                Dim command As DbCommand = conn.CreateCommand
                command.CommandText = sql
                command.CommandType = CommandType.Text
                command.CommandTimeout = 60

                '**********This blocks and never returns.
                rowsAffected = command.ExecuteNonQuery()
            Catch ex As Exception
                Debug.Print(ex.Message)
            End Try

        End If
    End Using
    Return rowsAffected
End Function

0 ответов

Другие вопросы по тегам