Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
SQLSTATEs innehåller detaljerad information om orsaken till en varning eller ett fel. SQLSTATEs i den här handboken baseras på dem som finns i ISO/IEF CLI-specifikationen, även om de SQLSTATE:er som börjar med snabbmeddelanden är specifika för ODBC.
Till skillnad från returkoder är SQLSTATEs i den här handboken riktlinjer och drivrutiner krävs inte för att returnera dem. Även om drivrutiner bör returnera rätt SQLSTATE för eventuella fel eller varningar som de kan identifiera, bör program inte räkna med att detta alltid inträffar. Orsakerna till den här situationen är dubbla:
Ofullständighet Även om den här handboken innehåller ett stort antal fel och varningar och möjliga orsaker till dessa fel och varningar, är den inte fullständig och kommer förmodligen aldrig att vara det. drivrutinsimplementeringar varierar helt enkelt för mycket. En viss drivrutin returnerar förmodligen inte alla SQLSTATE:er som anges i den här handboken och kan returnera SQLSTATE:er som inte anges i den här handboken.
Komplexitet Vissa databasmotorer – särskilt relationsdatabasmotorer – returnerar bokstavligen tusentals fel och varningar. Drivrutinerna för sådana motorer kommer sannolikt inte att mappa alla dessa fel och varningar till SQLSTATEs på grund av ansträngningen, mappningarnas inexakthet, den stora storleken på den resulterande koden och det låga värdet för den resulterande koden, som ofta returnerar programmeringsfel som aldrig bör påträffas vid körning. Därför bör drivrutiner mappa så många fel och varningar som är rimliga och se till att mappa de fel och varningar som programlogik kan baseras på, till exempel SQLSTATE 01004 (Data trunkerat).
Eftersom SQLSTATEs inte returneras på ett tillförlitligt sätt visar de flesta program bara dem för användaren tillsammans med deras associerade diagnostikmeddelande, som ofta är anpassat till det specifika felet eller varningen som inträffade och den interna felkoden. Det finns sällan någon förlust av funktioner i att göra detta, eftersom program inte kan basera programmeringslogik på de flesta SQLSTATEs ändå. Anta till exempel att SQLExecDirect returnerar SQLSTATE 42000 (syntaxfel eller åtkomstöverträdelse). Om SQL-instruktionen som orsakade det här felet är hårdkodad eller byggd av programmet är detta ett programmeringsfel och koden måste åtgärdas. Om SQL-instruktionen anges av användaren är detta ett användarfel och programmet har gjort allt som är möjligt genom att informera användaren om problemet.
När program använder grundläggande programmeringslogik på SQLSTATE:er bör de förberedas för att SQLSTATE inte ska returneras eller att en annan SQLSTATE returneras. Exakt vilka SQLSTATE:er som returneras på ett tillförlitligt sätt kan endast baseras på erfarenhet av många drivrutiner. En allmän riktlinje är dock att SQLSTATEs för fel som inträffar i drivrutinen eller Driver Manager, i motsats till datakällan, är mer benägna att returneras på ett tillförlitligt sätt. Till exempel returnerar de flesta drivrutiner förmodligen SQLSTATE HYC00 (valfri funktion implementeras inte), medan färre drivrutiner förmodligen returnerar SQLSTATE 42021 (kolumnen finns redan).
Följande SQLSTATEs anger körningsfel eller varningar och är bra kandidater för att basera programmeringslogik på. Det finns dock ingen garanti för att alla förare returnerar dem.
01004 (trunkerade data)
01S02 (Alternativvärdet har ändrats)
HY008 (åtgärden avbröts)
HYC00 (valfri funktion har inte implementerats)
HYT00 (tidsgränsen har upphört att gälla)
SQLSTATE HYC00 (valfri funktion som inte implementeras) är särskilt viktig eftersom det är det enda sättet för ett program att avgöra om en drivrutin stöder en viss instruktion eller ett visst anslutningsattribut.
En fullständig lista över SQLSTATE:er och vilka funktioner som returnerar dem finns i Bilaga A: ODBC-felkoder. En detaljerad förklaring av de villkor under vilka varje funktion kan returnera en viss SQLSTATE finns i den funktionen.