Diskuze: Transakce v ado net
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Mně přijde řešení v try bloku celkem logické a v pořádku. Řešil bych to nějak podobně:
try {
// sql dotazy
// na konci zavolat commit
// hláška o úspěchu
return true;
}
catch(vyjimka) {
// zde vyhodit vyjímku
// provest rollback
// ukoncit
}
Dobře, děkuji za odpověď. Měl jsem za to, že nějaké delší try blocky jsou bad practice, ale pravda, asi to jinak obejít moc nelze.
Není za co. Jsem rád, že ti to pomohlo. Zkus třeba ještě prostudovat dokumentaci k transactions, ale podle mně to ani jinak udělat nejde. Něco podobného jsem řešil minulý rok a dodnes vše běží v pořádku.
Ještě je jeden způsob:
using (SqlConnection conn = new SqlConnection("connectionString"))
using (SqlTransaction tran = conn.BeginTransaction())
{
// SQL dotazy
// ...
tran.Commit();
}
Tím, že to uzavřeš do using(...) dojde i u vyhození vyjímky k volání Dispose na Transakci (při tom se provede RollBack), k volání Dispose/Close na SqlConnection a následně se exception probublá výš.
PS: Totožný dotaz na StackOverflow
EDT: "žádná uživatelská transakce nebyla nalezena" ti nevyhodí dispose na konci using bloku ale provedení commit/rollback na již dokončené transakci.
To jsem také zkoušel a opravdu mi tu chybu vyhazuje konec using blocku ve chvíli, kdy proběhne commit těsně před koncem using blocku.
Takhle používám transakce běžně, nic takového mi to nehlásí... Používáš synchronní nebo asynchronní metody? Můžeš sem dát úryvek toho kódu?
Zobrazeno 9 zpráv z 9.