简体   繁体   中英

How to do Commit/rollback in sql server using VB.net

I'm working on an asp.net application which involves sql server as database. After writing huge function in vb.net, I had to select , insert and update different tables using one n other. I realized that, if all of this executed in one go then its a win win situation. If all of this doesn't go well then it would create a huge mess.

When we do DML operations in Oracle, we had to

commit;

rollback;

after every DML operation. My question is how do we do the same thing in sql server using VB.net.

My search leads to write a procedure @sql server. Inseration and delation will be done via sorted procedure. But I want it as normal operations like

SqlCommand("some query", connection")

Is it possible to do commit or rollback without using sorted procedures??

Thanks in advance!

You can also use a TransactionScope , which gives a bit cleaner code than managing transactions yourself.

Using transaction As NewTransactionScope()

    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()

        command.CommandText = _
          "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"

        command.ExecuteNonQuery()

        command.CommandText = _
          "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

        command.ExecuteNonQuery()

    End Using

    ' If we do not run Commit(), e.g. an error occurs before we get here,
    ' the transaction will automatically roll back when we leave the Using block below
    transaction.Commit()

End Using

You should use SqlTransaction . Here is a shameless copy-paste from MSDN:

Private Sub ExecuteSqlTransaction(ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
        connection.Open()

        Dim command As SqlCommand = connection.CreateCommand()
        Dim transaction As SqlTransaction

        ' Start a local transaction
        transaction = connection.BeginTransaction("SampleTransaction")

        ' Must assign both transaction object and connection 
        ' to Command object for a pending local transaction.
        command.Connection = connection
        command.Transaction = transaction

        Try
            command.CommandText = _
            "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
            command.ExecuteNonQuery()
            command.CommandText = _
            "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"

            command.ExecuteNonQuery()

            ' Attempt to commit the transaction.
            transaction.Commit()
            Console.WriteLine("Both records are written to database.")

        Catch ex As Exception
            Console.WriteLine("Commit Exception Type: {0}", ex.GetType())
            Console.WriteLine("  Message: {0}", ex.Message)

            ' Attempt to roll back the transaction. 
            Try
                transaction.Rollback()
            Catch ex2 As Exception
                ' This catch block will handle any errors that may have occurred 
                ' on the server that would cause the rollback to fail, such as 
                ' a closed connection.
                Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType())
                Console.WriteLine("  Message: {0}", ex2.Message)
            End Try 
        End Try 
    End Using 
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM