Junior
Kas ir darījums?
sobes.tech AI
Atbilde no AI
C# kontekstā ar datu bāzēm/izplatītām sistēmām darījums (transaction) ir operāciju secība, kas izpildīta kā vienība (atomāra darba vienība). Vai visi darījuma darbi tiek veiksmīgi pabeigti (apstiprināti), vai neviens netiek veikts (atsaukts).
Darījumiem ir ACID īpašības:
- Atomiskums (Atomicity): Vai visi darbi tiek veiksmīgi izpildīti, vai neviens.
- Konsistence (Consistency): Darījums pārvieto sistēmu no viena konsistenta stāvokļa uz citu.
- Izolācija (Isolation): Paralēli izpildītie darījumi neietekmē viens otru.
- Ilgnoturība (Durability): Veiksmīgi pabeigta darījuma rezultāti tiek saglabāti pat sistēmas avārijas gadījumā.
C# darījumu darbam bieži izmanto šādus klases:
System.Data.Common.DbTransaction(pamata klase datu bāzes darījumiem)System.Transactions.TransactionScope(vienkāršo izplatīto darījumu pārvaldību)- Specifiskas ADO.NET nodrošinātāju darījumu klases (piemēram,
System.Data.SqlClient.SqlTransaction)
Piemērs ar TransactionScope:
// `TransactionScope` izmantošana automātiskai darījuma pārvaldībai
using System;
using System.Data.SqlClient;
using System.Transactions;
// Pieņemam, ka ir savienojums ar datu bāzi
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();
// Mākslīga kļūda demonstrācijai
// Izmantojiet reālu UPDATE/INSERT/DELETE
// using (var command2 = new SqlCommand("UPDATE Accounts SET Balance = Balance + 100 WHERE AccountId = 2", connection2))
// {
// command2.ExecuteNonQuery();
// }
throw new InvalidOperationException("Simulēta kļūda"); // Kļūdas imitācija
}
// Ja visas operācijas ir veiksmīgas, izsaucam Complete()
scope.Complete();
Console.WriteLine("Darījums apstiprināts.");
}
}
catch (Exception ex)
{
// Ja notiek kļūda, TransactionScope automātiski atceļ darījumu
Console.WriteLine($"Darījums atcelts. Kļūda: {ex.Message}");
}