Utvecklare sträva efter att korrekt hantera det oväntade, så att användarna inte behöver oroa dig himmelska-liknande meddelanden om systemfel. Av denna anledning, undantagshantering varje. NET-applikationer ett standard del. Prova / catch block kan du fånga undantag och kontroll tillämpas med utgångspunkt från genomförandet. Interagera med databasen kommer att uppstå då en hel del misstag, men många utvecklare vet inte hur man ska hantera databasen skikt av ett fel. I denna skrift kommer vi att undersöka hur man använder SQLServer och T-SQL kod för att hantera fel i databasen.
Handhavandefel i T-SQL
SQLServer SQL dialogruta kan du enkelt hantera processen får lagras, funktion i icke-fatal fel uppstod, men inte alla fel är lättare att hantera. Faktum är dödlig och icke-fatal fel är många. Vad är dödlig, vad icke-dödlig, detta inte är en mycket väldokumenterad, men din ansökan kod kan alltid använda prova / catch block för att hantera databasen fatalt misstag. För alla andra fel, kan du använda följande tekniker.
Tjänster
Du bör använda den transaktionskod i databasen för att se till att allt är inget problem när alla ändringar har slutförts. SQLServer Online hjälp till uppgiften att en transaktion som beskrivs som en logisk enhet, som består av en rad uttalanden (markera, infoga, uppdatera eller ta bort, etc). Om transaktionen inte förekomma under några fel, kommer alla ändringar som transaktionen kommer att bli en permanent del av databasen. Om ett fel uppstår under denna period och kommer inte göra några ändringar i databasen.
Tjänsterna i den påbörja transaktion och END-satser transaktion mellan. Rulla tillbaka transaktion förklaring kan avbryta alla ändringar, så alla förändringar inte kommer att inträffa. Verkställa transaktion uttalande kan användas till permanenta förändringar. Låt oss nu fokusera på hur man handskas med T-SQL fel i.
@ @ Fel
@ @ Fel funktion så att du kan genomföra T-SQL felhantering. Det kommer att returnera felkod returneras av systemet. Om inga fel returneras "0". @ @ Fel funktion måste omedelbart kallas omedelbart efter ett uttalande, eftersom det kommer att ske efter varje T-SQL-uttryck tas bort.
RAISERROR
RAISERROR uttalande kan du skapa ett anpassat felmeddelande eller använda ett formulär på insidan har sysmessages nyheter. Du kan se dess syntax på nätet, men dess mest grundläggande form innehåller ett meddelande (för eget meddelande) eller meddelande ID (för befintliga källor) och dess svårighetsgrad och stat. SQLServer använder inte staten, så lätt gick till ett nummer på den. Svårighetsgrad att den allvarliga fel för 0 till 18 användare, medan 19-25 reserverad för administratörer.
I förteckning A, provet lagrade proceduren används för att uppdatera dessa funktioner ett prov Northwind databas rekord:
SKAPA FÖRFARANDE sp_UpdateCustomerPhone (@ id nvarchar (5), @ telefon nvarchar (24), @ retvalueint utgång) ASBEGINBEGIN TRANSACTIONUPDATE [dbo]. [Kunder] SET [Telefon] = @ telefon VAR ([CustomerID] = @ id) IF (@ @ ERROR 0) - ett icke-negativt värde signaler en errorBEGINROLLBACK transaktion - förändringar är inte permanentRAISERROR ("Uppdatera Kunder fel ', 1,1) - Att göra ett anpassat felmeddelande - Egna felmeddelande visas om löpa från consoleSET @ retvalue = -1 - tillbaka negativt värde till signalproblemsENDCOMMIT transaktion - göra ändringarna permanenta, så skivan är updatedSET @ retvalue = 1 - en positiv avkastning värde signalssuccessRETURNEND
Lista A
Om inga fel inträffar, tog det telefonnummer som anges är inställt på ett värde har skickats till processen. Den använder en parameter returvärdet, om det är problem den returnerar ett negativt värde, om alla de saker med genomförandet av några problem, kommer det tillbaka ett positivt.
Användning av sparade värden förfarande tillbaka
Genom den lagrade proceduren returvärdet, kan vi använda den i vår. NET-kod i åratal. SqlCommand objekt kan du enkelt lägga till en parameter till bearbeta och lagra det returnerade värdet. Parametrar i riktning egendom används för att ta emot värdet från lagrade proceduren samtal. Den har två värden: InputOutput och produktion. I vårt exempel använder vi det Output till statlig värde.
Denna kod är en enkel ASP.NET-sida för Northwind databasen används för att överföra en kund till en datatabell i det nya värdet. Det id värdet är faktiskt lagras i ett dolt fält där du enkelt kan läggas ut till formen, men det här fältet används för att beskriva. Ange värdet i textfältet används för att uppdatera databasen bordet där telefonnumret fältet.
Parametern läggs till i SqlCommand objektet (de måste vara exakt svarar mot den lagrade proceduren parametrar). Ledning genom ExecuteNonQuery metoden SqlCommand objekt körs. När det väl har verkställts, det returnerade värdet kan vara parametrar för att hämta.
Koden kontrollerar returvärdet (-1 anges ett problem), och ett meddelande visas i en Label-kontrollen i. Dessutom ett försök / catch-block används för att fånga interagera med databasen som kan uppstå under drift av allvarliga fel. Se lista B:
Nytt nummer: OnCommand = "btnUpdatePhone_Click" runat = "server" / ALFKI
Förteckning B
Förteckning C i motsvarande VB.NET kod:
Nytt nummer: OnCommand = "btnUpdatePhone_Click" runat = "server" / ALFKI
Lista C
Databasen omfattar alla
Används prova / catch block för att hantera. NET anmälningskod i undantaget är en enkel process, men du kan övervaka undantag databasen lager. SQLServer T-SQL-språket undantagshantering kod att ge dig allt du behöver.