DbCommand.ExecuteNonQuery зависает бесконечно
Я пытался выполнить запрос вставки для таблицы в моей базе данных Oracle. ниже тест, который я делаю.
Сначала заблокируйте таблицу, в которую я хочу сделать вставку из сеанса разработчика SQL
lock table RANDOM_TABLE in exclusive mode nowait
- Попробуйте запустить вставку, используя DbCommand.ExecuteNonQuery
- У меня свойство 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