Ontwikkelaars streven naar goed omgaat met het onverwachte, zodat gebruikers niet hoeven te maken over hemelse-achtig systeem foutmeldingen. Om deze reden is elke exception handling. NET-toepassingen een standaard onderdeel. Probeer / catch blok kun je uitzonderingen en controle op de toepassing vangst uit het punt van uitvoering. Interactie met de database zal optreden als veel fouten, maar veel ontwikkelaars weten niet hoe om te gaan met de database laag van een fout. In deze paper onderzoeken we hoe SQLServer en T-SQL code te gebruiken om fouten af te handelen in uw database.
Omgaan met fouten in T-SQL
SQLServer SQL dialoogvenster kunt u gemakkelijk te verwerken het proces kan worden opgeslagen, functie in een niet-fatale fout is opgetreden, maar niet alle fouten zijn makkelijker te hanteren. In feite, fatale en niet-fatale fouten zijn legio. Wat dodelijk is, wat niet-fatale, dit is niet zeer goed gedocumenteerd, maar uw aanvraag code kan altijd gebruik maken van proberen / catch blok om fatale database fouten af te handelen. Voor alle andere fouten, kunt u gebruik maken van de volgende technieken.
Diensten
U moet gebruik maken van de transactie code in de database om ervoor te zorgen dat alles is geen probleem wanneer alle wijzigingen zijn voltooid. SQLServer-line help to de taak van een transactie die wordt beschreven als een logische eenheid, die bestaat uit een series van uitspraken (selecteren, plaatst u, bijwerken of verwijderen, etc). Als de transactie zich niet voor tijdens eventuele fouten, dan alle veranderingen die de transactie zal een permanent onderdeel van de database. Als er een fout optreedt tijdens deze periode en zal geen wijzigingen aanbrengen aan de database.
Diensten inbegrepen in de transactie en BEGIN END afrekening tussen. ROLLBACK Rekeningoverzicht kunt u alle wijzigingen, zodat eventuele wijzigingen zal niet optreden. COMMIT Rekeningoverzicht kan worden gebruikt voor permanente wijzigingen. Nu, laten we ons concentreren op hoe om te gaan met T-SQL fouten in de.
@ @ Fout
@ @ Fout functie, zodat je kunt uitvoeren T-SQL error handling. Het zal weer de foutcode geretourneerd door het systeem. Als er geen fout wordt geretourneerd "0." @ @ Fout functie moet onmiddellijk worden opgeroepen onmiddellijk na een verklaring, want het zal na elke T-SQL-instructie worden verwijderd.
RAISERROR
RAISERROR statement kunt u een aangepast foutbericht genereren of een formulier op de binnenkant gebruik is sysmessages nieuws. U kunt online de syntax, maar zijn meest elementaire vorm bevat een bericht (aangepast bericht) of een bericht id (voor bestaande bronnen) en de ernst ervan en staat. SQLServer maakt geen gebruik van state, zo licht doorgegeven aan het een nummer erop. Ernst dat de ernst van de fout voor 0 tot-18 gebruikers, terwijl de 19-25 voorbehouden voor beheerders.
In de lijst A, het monster opgeslagen procedure gebruikt om het actualiseren van deze functies een monster database Noordenwind stemming:
CREATE PROCEDURE sp_UpdateCustomerPhone (@ id nvarchar (5), @ nvarchar telefoon (24), @ retvalueint output) ASBEGINBEGIN TRANSACTIONUPDATE [dbo]. [Klanten] SET [Telefoon] = @ telefoon waar ([KlantId] = @ id) IF (@ @ FOUT 0) - een niet-negatieve waarde signalen errorBEGINROLLBACK een transactie - veranderingen zijn niet permanentRAISERROR ('Update Klanten Error', 1,1) - sprake van een aangepaste foutmelding - Custom foutmelding verschijnt als lopen vanaf consoleSET @ retvalue = -1 - terug negatieve waarde in om signalproblemsENDCOMMIT transactie - maken de veranderingen blijvend, dus record is updatedSET @ retvalue = 1 - een positief rendement waarde signalssuccessRETURNEND
Lijst A
Als er geen fout optreedt, nam zij het genoemde telefoonnummer is ingesteld op een waarde doorgegeven aan het proces. Het maakt gebruik van een return waarde parameter, wanneer er problemen zijn geeft hij een negatieve waarde, als alle van de dingen die met de uitvoering van geen problemen, het zal een positief rendement.
Met behulp van opgeslagen procedure return values
Door de opgeslagen procedure return waarde, kunnen we gebruiken in ons. NET-code voor jaren. SqlCommand object kunt u eenvoudig een parameter toe te voegen aan het proces en de terugkeer waarde op te slaan. Parameters van de Directie eigenschap wordt gebruikt om de waarde van de opgeslagen procedure oproep ontvangt. Het pand heeft twee waarden: InputOutput en Output. In ons voorbeeld zullen we gebruik maken van de uitgang te vermelden waarde te ontvangen.
Deze code is een eenvoudige ASP.NET-pagina voor de Noordenwind-database wordt gebruikt om een klant over te dragen aan een data-tabel in de nieuwe waarde. De id-waarde wordt opgeslagen in een verborgen veld waar je gemakkelijk kan worden doorgegeven aan de vorm, maar dit veld wordt gebruikt om het te beschrijven. Voer de waarde in het tekstveld wordt gebruikt om de database tabel bij te werken wanneer het telefoonnummer veld.
Parameter is toegevoegd aan de SqlCommand object (zij moeten voldoen aan de nauwkeurig opgeslagen procedure parameters). Commando via ExecuteNonQuery methode van SqlCommand object wordt uitgevoerd. Zodra deze is uitgevoerd, de terugkeer waarde kan worden parameters op te halen.
Code controleert de return waarde (-1 aangegeven een probleem), en een bericht wordt weergegeven in een Label-besturingselement inch Daarnaast is er een try / catch-blok wordt gebruikt om vast te leggen interactie met de database die zich kunnen voordoen tijdens de exploitatie van een fatale fouten. Zie de lijst B:
Nieuw nummer: OnCommand = "btnUpdatePhone_Click" runat = "server" / ALFKI
Lijst B
Lijst C in de overeenkomstige VB.NET code:
Nieuw nummer: OnCommand = "btnUpdatePhone_Click" runat = "server" / ALFKI
Lijst C
De databank omvat alle
Gebruikt try / catch-blok. NET applicatie code in de uitzondering met handvat is een eenvoudig proces, maar u kunt de database laag uitzondering. T-SQL taal SQLServer's exception handling code om u alles wat u nodig heeft.