Вторая команда SQL в транзакции не выполняется - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь выполнить 2 SQL команды (1 чтение, 1 удаление) в течение 1 транзакции в. NET. Вот что я делаю:

Using tran = objConn.BeginTransaction(IsolationLevel.Serializable)
    Using command As New SqlCommand("SELECT foo FROM bar WHERE cost > 1", objConn)
        command.Transaction = tran
        Using dr As SqlDataReader = scOnDemand.ExecuteReader()
            While dr.Read
                some_list.Add(dr("foo"))
            End While
        End Using
    End Using
    Using command As New SqlCommand("DELETE FROM bar WHERE cost > 1", objConn)
        command.Transaction = tran
        command.ExecuteNonQuery()                 //Doesn't do anything
    End Using
End Using

Идея состоит в том, чтобы сохранить атомы 2 запросов c, но по какой-то причине DELETE не работает. SqlDataReader читается просто отлично, и он go во втором using выражении, но command.ExecuteNonQuery(), похоже, ничего не делает. Любая причина, почему это не работает?

1 Ответ

3 голосов
/ 07 января 2020

Транзакции должны заканчиваться Commit или Rollback . Если вы не вызываете Commit, то в конце блока использования автоматически вызывается откат и, конечно, удаление не выполняется.

Using command As New SqlCommand("DELETE FROM bar WHERE cost > 1", objConn)
    command.Transaction = tran
    command.ExecuteNonQuery()                 
End Using
tran.Commit()
....
...