Utviklere strever for å riktig håndtere det uventede, slik at brukerne ikke trenger å bekymre deg himmelske-lignende system feilmeldinger. På grunn av dette, unntaket håndtering hver. NET applikasjoner en standard del. Prøv / catch-blokken kan du få unntak og kontroll program fra poenget med gjennomføringen. Samhandle med databasen vil skje når en mye feil, men mange utviklere ikke vet hvordan man skal håndtere databasen laget av en feil. I denne artikkelen vil vi utforske hvordan å bruke SQLServer og T-SQL-kode for å håndtere feil i databasen.
Håndtering av feil i T-SQL
SQLServer's SQL dialogen lar deg enkelt håndtere prosessen kan lagres, funksjon i ikke-fatale feilen oppstod, men ikke alle feil blir lettere å håndtere. Faktisk, dødelige og ikke-fatale feil er mange. Hva er dødelig, hva ikke-dødelige, dette er ikke veldig godt dokumentert, men søknaden koden kan alltid bruke prøve / catch-blokken til å håndtere fatale database feil. For alle andre feil, kan du bruke følgende teknikker.
Tjenester
Du bør bruke transaksjonskoden i databasen for å sikre at alt er ikke noe problem når alle endringene er gjennomført. SQLServer-line hjelp til oppgaven med en transaksjon beskrevet som en logisk enhet, som består av en rekke påstander (velg, sette inn, oppdatere eller slette, etc). Dersom transaksjonen ikke forekomme under noen feil, deretter alle endringene transaksjonen vil bli en permanent del av databasen. Dersom en feil oppstår under denne perioden og vil ikke foreta noen endringer i databasen.
Tjenester som inngår i transaksjonen og END BEGIN Transaction uttalelser mellom. Tilbakestille transaksjon uttalelse kan avbryte alle endringer, slik at eventuelle endringer ikke vil skje. Transaksjon uttalelse kan brukes til permanente endringer. Nå, la oss fokusere på hvordan man skal håndtere T-SQL feil i.
@ @ Feil
@ @ Feil funksjonen kan du oppnå T-SQL feilhåndtering. Den vil returnere feilkoden som returneres av systemet. Hvis ingen feil returneres "0". @ @ Feil funksjon må umiddelbart kalles umiddelbart etter et utsagn, fordi det vil bli etter hvert T-SQL-setningen fjernes.
RAISERROR
RAISERROR uttalelse kan du generere en egendefinert feilmelding eller bruke et skjema på innsiden er sysmessages nyheter. Du kan vise sin syntaks på nettet, men sin mest grunnleggende form inkluderer en melding (for tilpassede melding) eller melding id (for eksisterende kilder) og dens alvorlighetsgrad og stat. SQLServer bruker ikke staten, så lett sendes til den et tall på det. Alvorlighetsgrad at alvorlighetsgraden av feil for 0 til-18 brukere, mens 19-25 forbeholdt administratorer.
I liste A, prøven lagrede prosedyren brukes til å oppdatere disse funksjonene et utvalg Northwind database posten:
CREATE PROSEDYRE sp_UpdateCustomerPhone (@ id nvarchar (5), @ telefonen nvarchar (24), @ retvalueint output) ASBEGINBEGIN TRANSACTIONUPDATE [dbo]. [Kunder] SET [Telefon] = @ telefonen når ([Kunde] = @ id) IF (@ @ FEIL 0) - et ikke-negativ verdi signaler en errorBEGINROLLBACK Transaction - endringene er ikke permanentRAISERROR ('Oppdatere Kunder Feil', 1,1) - heve en egendefinert feilmelding - Tilpasset feilmelding vises hvis løpe fra consoleSET @ retvalue = -1 - returnerer negativ verdi til signalproblemsENDCOMMIT Transaction - gjør endringene permanente, så posten er updatedSET @ retvalue = 1 - en positiv avkastning verdi signalssuccessRETURNEND
Liste A
Hvis ingen feil oppstår, tok det telefonnummeret som er angitt er satt til en verdi gått over til prosessen. Den bruker en returverdi parameter, dersom det er problemer den returnerer en negativ verdi, hvis alle de tingene med gjennomføringen av uten problemer, vil den komme en positiv.
Bruke lagrede prosedyren returnerer verdier
Gjennom den lagrede prosedyren returnerer verdi, kan vi bruke den i vår. NET kode for år. SqlCommand objektet kan du enkelt legge til en parameter til prosessen og lagre returverdien. Parametere av Direction eiendommen brukes til å motta verdien fra lagret prosedyrekall. Den har to eiendomsverdier: InputOutput og Output. I vårt eksempel vil vi bruke Utdata til å motta statlige verdi.
Denne koden er en enkel ASP.NET side for Northwind databasen brukes til å overføre en kunde på en data-tabell i den nye verdien. Den id verdien er faktisk lagret i et skjult felt der du kan enkelt sendes til skjemaet, men dette feltet brukes til å beskrive. Skriv inn verdien i tekstfeltet brukes til å oppdatere databasen bordet hvor telefonnummeret feltet.
Parameter er lagt til SqlCommand objektet (de må være nøyaktig oppfylle den lagrede prosedyren parametere). Kommando gjennom ExecuteNonQuery metode SqlCommand objekt er henrettet. Når den er utført, returverdien kan parametere for å hente.
Koden sjekker returverdien (-1 indikert et problem), og en melding vil vises i en Label kontroll i. I tillegg er en prøve / catch-blokken blir brukt til å fange interaksjon med databasen som kan oppstå under drift av noen fatale feil. Se liste B:
Nytt nummer: OnCommand = "btnUpdatePhone_Click" runat = "server" / ALFKI
Liste B
Liste C i tilsvarende VB.NET kode:
Nytt nummer: OnCommand = "btnUpdatePhone_Click" runat = "server" / ALFKI
Liste C
Databasen omfatter alle
Brukte prøve / catch-blokken til å håndtere. NET programkode i unntaket er en enkel prosess, men du kan overvåke databasen laget unntaket. SQLServer T-SQL språket unntak håndtering koden for å gi deg alt du trenger.