7.3. Nesting Manual Transactions with the SQL Server .NET Data Provider
Problem
You need to create a nested transaction using the SQL Server .NET data provider, but the Begin()
command that you need is only available with the OLEDB .NET data provider. The SQL Server data provider appears to provide no built-in support for nested transactions. You want to nest transactions when using it.
Solution
Simulate nested transactions with savepoints when using the SQL Server .NET data provider, manage and control the lifetime of the SqlTransaction
class, and create the required exception handling.
The solution requires a table named NestManualTransaction
in the AdoDotNet35Cookbook
database. Execute the T-SQL code in Example 7-4 to create the table.
Example 7-4. Create table NestManualTransaction
USE AdoDotNet35Cookbook GO CREATE TABLE Nest ManualTransaction ( Id int NOT NULL, Field1 nvarchar(50) NULL, Field2 nvarchar(50) NULL, CONSTRAINT PK_Nest ManualTransaction PRIMARY KEY CLUSTERED ( Id ASC ) )
The solution creates a parameterized insert command that inserts a single record into the NestManualTransaction
table. A transaction is started and a record inserted with Id = 1
. A savepoint named SavePoint1
is created. Next, an attempt is made to insert two records with Id = 2
and Id = null
within a try-catch
block. The insert of the Id = null
record fails and the transaction is rolled back to SavePoint1
in a catch
block and the transaction is committed. The contents of the NestManualTransaction
table ...
Get ADO.NET 3.5 Cookbook, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.