sql >> Databáze >  >> RDS >> Sqlserver

Zpracování chyb serveru SQL Server:výjimky a smlouva mezi databází a klientem

Jsem opice klientského kódu, která se hodně zabývá databázemi. Zde je návod, jak to řeším.

Výjimky (raiseerrors), ke kterým dochází v SQL, se šíří zpět k volajícímu. To by zahrnovalo omezení ref, narušení jedinečného indexu, závažnější problémy atd. V zásadě by mělo být šířeno zpět cokoli, kvůli čemu by operace s daty neproběhla normálně.

Volající C# by měl mít toto:

catch (SQLException sqlEx)

A pak výjimku zpracujte podle potřeby. Měly by mít specifický popisovač SQLException. To je důležité.

Obecně se vyhýbam výstupním parametrům, protože je považuji za související s přenášenými daty a nikoli za chybové zprávy, navíc mohu zkontrolovat výjimku pro chybový kód SQL Server, takže všechna data, která potřebujeme, by měla být v této výjimce.

Navíc v některých případech s SQL Server máme uložené procedury, které by mohly způsobit "výjimky obchodního typu". V těchto případech přidáme vlastní číslo chyby (nad 50 000) a v případě potřeby tuto chybu v uložené proceduře vyvoláme. Obecně se je snažíme udržet na minimu, protože to zvyšuje složitost, ale v některých případech jsme zjistili, že jsou nezbytné.

Nyní, protože klient zachycuje výjimku SQL, může se podívat na kód chyby vrácený serverem SQL ve výjimce a poté provést jakoukoli speciální akci (v případě potřeby), když je výjimka zachycena a číslo chyby je určitá hodnota. To umožňuje sekundární úroveň zpracování chyb na základě kódu chyby, pokud je to vyžadováno pro vlastní chyby (>50 000).

To také umožňuje správcům databází vyvolat vlastní chyby a zajistit, aby klientský kód měl konzistentní způsob, jak se s nimi vypořádat. DBA by pak museli sdělit opici klientského kódu, jaké byly vlastní chyby, aby se na ně mohli připravit.

Obvykle nepoužívám návratové kódy pro účely zpracování chyb, i když vidím, jak by mohly být použity, ale to znamená více logiky ve vrstvě kódové opice, na kterou se lze podívat a vypořádat se s návratovým kódem. Pokud jsou problémové, chci výjimku zpět, protože pak se s nimi mohu důsledně vypořádat. Pokud se musím podívat také na návratové kódy, nyní existuje několik způsobů zpracování chyb.



  1. Zobrazit nejlepších N skóre v MySQL 8 bez duplikátů podle kategorie

  2. Volitelné sloupce pro filtrování záznamů databáze

  3. Mysql2::Error:Nesprávná hodnota řetězce

  4. Jak čekat 2 sekundy?