Önceki yazımda ado.net için transaction kavramına bakmıştık. Şimdi de SQL server tarafını inceleyelim.
Transaction ın neden kullanılması gerektiğini konuşmuştuk. Bu yazımda hemen örneğe gececeğim.
Yine Northwind örnek veritabanı üstünden gideceğim. Yorum satırlarıyla kodumuza bakalım.
USE Northwind GO -- t1 isminde transaction nesnesini başlattım. BEGIN TRANSACTION t1; -- TRY - Catch başlatıyoruz. BEGIN TRY -- Employess tablosunda null olamayan birde LastName kolunu var fakat ben o kolunu yazmıyorum. Yani işlem hata alacak. INSERT INTO Employees (FirstName) VALUES ('Ahmet') -- TRY'ı kapatıp catch bloğunu açıyoruz. END TRY BEGIN CATCH -- Bu select sorgusunu yazmamız gerekmiyor fakat hatanın tam ayrıntısı için geriye bir table döndürür. Ve kontrol edebiliriz. SELECT ERROR_NUMBER() AS ErrorNumber ,ERROR_SEVERITY() AS ErrorSeverity ,ERROR_STATE() AS ErrorState ,ERROR_PROCEDURE() AS ErrorProcedure ,ERROR_LINE() AS ErrorLine ,ERROR_MESSAGE() AS ErrorMessage -- Yapılan işlemleri geri sardırıyoruz. IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION t1; END CATCH; -- Eğer sorgumuz hatasızsa işlemin gerçekleşmesi için commit ediyoruz. IF ile kontrol etmemin sebebi transactionın açık olup olmadığını kontrol ediyorum IF @@TRANCOUNT > 0 COMMIT TRANSACTION t1
Hata aldğım çıktı şu şekilde;