Junior
Əməliyyat nədir?
sobes.tech Süni İntellekt
AI-dan cavab
C# və verilənlər bazaları/paylanmış sistemlər kontekstində tranzaksiya, bir bütöv kimi icra olunan əməliyyatlar ardıcıllığıdır (atomik iş vahidi). Tranzaksiyadakı bütün əməliyyatlar uğurla tamamlanır (təsdiqlənir), və ya heç biri yerinə yetirilmir (geri alınır).
Tranzaksiyalar ACID xüsusiyyətlərinə malikdir:
- Atomiklik: Bütün əməliyyatlar uğurla tamamlanır, və ya heç biri yerinə yetirilmir.
- Uyğunluq: Tranzaksiya sistemi bir uyğun vəziyyətdən digərinə keçir.
- İzolyasiya: Paralel icra olunan tranzaksiyalar bir-birinə təsir etmir.
- Davamlılıq: Uğurla tamamlanan tranzaksiyanın nəticələri sistem nasazlığı olsa belə saxlanılır.
C#-da tranzaksiyalarla işləmək üçün tez-tez aşağıdakı sinflər istifadə olunur:
System.Data.Common.DbTransaction(verilənlər bazası tranzaksiyaları üçün əsas sinif)System.Transactions.TransactionScope(paylanmış tranzaksiyaların idarə edilməsini sadələşdirir)- ADO.NET təminatçı tranzaksiya sinfləri (məsələn,
System.Data.SqlClient.SqlTransaction)
TransactionScope istifadə nümunəsi:
// Avtomatik tranzaksiya idarəçiliyi üçün TransactionScope istifadə
using System;
using System.Data.SqlClient;
using System.Transactions;
// Bağlantı zənciri mövcuddur kimi qəbul edilir
string connectionString = "...";
try
{
using (var scope = new TransactionScope())
{
using (var connection1 = new SqlConnection(connectionString))
{
connection1.Open();
using (var command1 = new SqlCommand("UPDATE Accounts SET Balance = Balance - 100 WHERE AccountId = 1", connection1))
{
command1.ExecuteNonQuery();
}
}
using (var connection2 = new SqlConnection(connectionString))
{
connection2.Open();
// Sınaq xətası üçün
// Real UPDATE/INSERT/DELETE istifadə edin
// using (var command2 = new SqlCommand("UPDATE Accounts SET Balance = Balance + 100 WHERE AccountId = 2", connection2))
// {
// command2.ExecuteNonQuery();
// }
throw new InvalidOperationException("Sınaq xətası"); // Sınaq xətası
}
// Əgər bütün əməliyyatlar uğurludursa, Complete çağırılır
scope.Complete();
Console.WriteLine("Tranzaksiya təsdiqləndi.");
}
}
catch (Exception ex)
{
// Xəta baş verərsə, TransactionScope avtomatik olaraq tranzaksiyanı geri alır
Console.WriteLine($"Tranzaksiya geri alındı. Xəta: {ex.Message}");
}