7.4. Using ADO.NET and SQL Server DBMS Transactions Together
Problem
You need to use a DBMS transaction within a SQL Server stored procedure from an ADO.NET transaction with the SQL Server .NET data provider.
Solution
Use error-checking within a try-catch
block as shown in Example 7-5.
The solution uses a table named SimultaneousTransaction
in the database AdoDotNet35Cookbook
. Execute the following T-SQL to create the table:
USE AdoDotNet35Cookbook GO CREATE TABLE SimultaneousTransaction( Id int IDENTITY(1,1) NOT NULL PRIMARY KEY, Field1 nvarchar(50) NULL, Field2 nvarchar(50) NULL )
The solution uses a single stored procedure named InsertSimultaneousTransaction
that inserts a single record into the SimultaneousTransaction
table within a DBMS transaction. If the record insert fails, the transaction is rolled back; otherwise, the transaction is committed. The solution takes an argument named @RollbackFlag
that causes the DBMS transaction to be rolled back simulating a failure. Create the stored procedure by executing the T-SQL code in Example 7-6.
Example 7-6. Stored procedure: InsertSimultaneousTransaction
USE AdoDotNet35Cookbook GO CREATE PROCEDURE InsertSimultaneousTransaction @Id int output, @Field1 nvarchar(50), @Field2 nvarchar(50), @RollbackFlag bit = 0 AS SET NOCOUNT ON BEGIN TRAN INSERT SimultaneousTransaction( Field1, Field2) VALUES ( @Field1, @Field2) IF @@ERROR <> 0 OR @@ROWCOUNT = 0 OR @RollbackFlag = 1 BEGIN ROLLBACK TRAN SET @Id = -1 RETURN 1 END COMMIT TRAN SET @ID = SCOPE_IDENTITY( ...
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.